我需要將一個完整的字符串轉換為 Json 格式,挑戰在于在有效負載中有一個嵌套字段,同樣需要將其讀取為 Json。我的 Java 代碼如下所示:首先我讀了字符串: String payload ="{\"appId\":\"APP02\",\"employeeId\":\"789-33-3887\",\"name\":\"Paolo Ledner\",\"phonenumber\":\"757.910.0396\",\"beer\":\"Sierra Nevada Bigfoot Barleywine Style Ale\",\"company\":\"Schmidt LLC\",\"address\":\"{\\\"street\\\":\\\"Coralie Trafficway\\\",\\\"zipcode\\\":\\\"12291\\\"}\"}";現在我閱讀了我的第一個 JSON 對象:Gson g = new Gson();JsonElement jelem = g.fromJson(payload,JsonElement.class);JsonObject jobj = jelem.getAsJsonObject();這會正確返回 Json 對象,但我無法從嵌套字段中讀取鍵address,然后我需要讀取該字段的內容,將其轉換為字符串,然后根據我的邏輯應用相同的方法來獲取 Json 格式和閱讀我需要的鑰匙,這是這一步:String address = jobj.get("address").toString().substring(1,jobj.get("address").toString().length()-1);JsonElement jeaddress = g.fromJson(address, JsonElement.class);JsonObject jaddress = jeaddress.getAsJsonObject();System.out.println(jaddress.get("zipcode"));問題:字符串address正確返回,{\"street\":\"Coralie Trafficway\",\"zipcode\":\"12291\"}但是當我嘗試打印 jaddress.zipcode 時出現錯誤:線程“主”com.google.gson.JsonSyntaxException 中的異常:com.google.gson.stream.MalformedJsonException:第 1 行第 2 列路徑 $ 的預期名稱。在 com.google.gson.Gson.fromJson(Gson.java:902) 在 com.google.gson.Gson.fromJson(Gson.java:852) 在 com.google.gson.Gson.fromJson(Gson.java:801 ) 在 bncingestion.kafkaconsumer.validating_payload(kafkaconsumer.java:29) 在 bncingestion.kafkaconsumer.main(kafkaconsumer.java:15) 的 com.google.gson.Gson.fromJson(Gson.java:773) 由:com.google .gson.stream.MalformedJsonException:第 1 行第 2 列路徑 $ 的預期名稱。在 com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1559) 在 com.google.gson.stream.JsonReader.doPeek(JsonReader.java:513) 在 com.google.gson.stream.JsonReader.hasNext (JsonReader.java:414) 在 com.google.gson.internal。這個轉換的另一個版本沒有刪除"是在這里:String address = jobj.get("address").toString();JsonElement jeaddress = g.fromJson(address, JsonElement.class);JsonObject jaddress = jeaddress.getAsJsonObject();System.out.println(jaddress.get("zipcode"));我很感激任何幫助。謝謝
1 回答

FFIVE
TA貢獻1797條經驗 獲得超6個贊
調用jobj.get("address").toString()
將值 (a) 格式化JsonElement
為 JSON,并且由于該值是字符串,因此它會添加引號并轉義內容。不要那樣做,即不要toString()
顯式或隱式調用 ,如果你在追求value。
將行替換為String address = jobj.get("address").getAsString();
也將行替換為System.out.println(jaddress.get("zipcode").getAsString());
添加回答
舉報
0/150
提交
取消