使用Gson Java读取Json格式时出现问题

使用Gson Java读取Json格式时出现问题,java,json,gson,jsonforms,Java,Json,Gson,Jsonforms,我需要将一个完整的字符串转换为Json格式,挑战在于在有效负载中有一个嵌套字段,它需要同样地读取为Json 我的java代码如下所示: 首先我读字符串: 现在我阅读了我的第一个JSON对象: 这将正确返回Json对象,但我无法从嵌套字段address读取密钥,然后我需要读取此字段的内容,将其转换为字符串,然后根据我的逻辑应用相同的方法获取Json格式并读取我需要的密钥,以下是此步骤: String address = jobj.get("address").toString().subs

我需要将一个完整的字符串转换为Json格式,挑战在于在有效负载中有一个嵌套字段,它需要同样地读取为Json

我的java代码如下所示:

  • 首先我读字符串:
  • 现在我阅读了我的第一个JSON对象:
这将正确返回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时,我得到错误:

线程“main”com.google.gson.JsonSyntaxException中的异常: com.google.gson.stream.MalformedJsonException:第1行应为名称 第2列路径$。在com.google.gson.gson.fromJson(gson.java:902)上 fromJson(gson.java:852)位于 fromJson(gson.java:801)位于 fromJson(gson.java:773)位于 bncingsition.kafkaconsumer.validating_有效负载(kafkaconsumer.java:29) 在bncingsition.kafkaconsumer.main(kafkaconsumer.java:15)处,由以下原因引起: 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.bind.TypeAdapters$29.read(TypeAdapters.java:738) 在 com.google.gson.internal.bind.TypeAdapters$29.read(TypeAdapters.java:714) 在 com.google.gson.internal.bind.TypeAdapters$35$1.read(TypeAdapters.java:910) 在com.google.gson.gson.fromJson(gson.java:887)。。。还有5个

此转换的附加版本不删除
,如下所示:

String address = jobj.get("address").toString();
JsonElement jeaddress = g.fromJson(address, JsonElement.class);
JsonObject jaddress = jeaddress.getAsJsonObject();
System.out.println(jaddress.get("zipcode"));
在这种情况下,错误为:

线程“main”java.lang.IllegalStateException中的异常:不是JSON 对象:“{\'street\':\'Coralie Trafficway\',\'zipcode\':\'12291\'” 位于com.google.gson.JsonElement.getAsJsonObject(JsonElement.java:90) 在 bncingsition.kafkaconsumer.validating_有效负载(kafkaconsumer.java:31) 位于bncingsition.kafkaconsumer.main(kafkaconsumer.java:15)

谢谢你的帮助。 感谢调用
jobj.get(“address”).toString()
将值(a
JsonElement
)格式化为JSON,由于值是一个字符串,它会添加引号并转义内容。如果您在值之后,请不要显式或隐式调用
toString()

将行替换为
字符串地址=jobj.get(“地址”).getAsString();


同时,将行替换为
System.out.println(jaddress.get(“zipcode”).getAsString());

为什么要从
地址
文本值中剥离第一个和最后一个字符?
“address”
的文本值是
“{”street\:\“Coralie Trafficway\”,“zipcode\:“12291\”
,解析为文本
{”street:“Coralie Trafficway”,“zipcode:“12291”}
,因此如果删除第一个和最后一个字符,它就不再是有效的JSON,因为您刚刚删除了使其成为JSON对象的大括号。--可能是您调试了代码,例如打印了
jobj.get(“地址”).toString()的值
,你自己也会看到的。我甚至试过不删除这两个双引号,结果是同一个人。我已经用那个版本和错误更新了帖子
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"));
String address = jobj.get("address").toString();
JsonElement jeaddress = g.fromJson(address, JsonElement.class);
JsonObject jaddress = jeaddress.getAsJsonObject();
System.out.println(jaddress.get("zipcode"));