使用 Gson Java 读取 Json 格式的问题

我需要将一个完整的字符串转换为 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"));


我很感激任何帮助。谢谢


弑天下
浏览 81回答 1
1回答

FFIVE

调用jobj.get("address").toString()将值 (a) 格式化JsonElement为 JSON,并且由于该值是字符串,因此它会添加引号并转义内容。不要那样做,即不要toString()显式或隐式调用 ,如果你在追求value。将行替换为String address = jobj.get("address").getAsString();也将行替换为System.out.println(jaddress.get("zipcode").getAsString());
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java