【发布时间】:2016-10-02 16:51:10
【问题描述】:
如何反序列化包含其他对象中的对象列表的 JSON 字符串?我找到了简单反序列化的解释,但我无法从中推断出太多,因为它们都有点偏离。例如(省略 POJO),对于
String json = "[ {
"id" : 33147,
"name" : "Refinancing",
"photos" : [ {
"name" : "347.png",
"url" : "/loans/568/photos/092"
} ],
"username" : "zach1985"
} , {
"id" : 7693,
"name" : "Stuff",
"photos" : [ {
"name" : "newpic1.png",
"url" : "/loans/123446/photos/890"
} ],
"username" : "sengaia"
} ]";
ArrayList<Ad> ads = new ArrayList<>;
deserialize(json, ads);
System.out.println(ads.get(1).getName());
System.out.println(ads.get(0).getPhotos().get(0).getName());
输出将是“Stuff”和“347”。那么deserialize()方法需要如何实现呢?
【问题讨论】:
-
您不能将其反序列化为数组列表。一个数组列表只包含 1 个没有值的键。我建议你使用 HashMap。编辑:糟糕,我没有看到它是一个 JSON 数组。
-
@Martacus 这是一个 JSON 数组。
-
问:如何反序列化包含其他对象中的对象列表的 JSON 字符串? A:有很多不同的方法。如果您计划在 Java 中更广泛地使用 JSON,我建议您熟悉 Jackson:mkyong.com/java/how-to-convert-java-object-to-from-json-jackson
-
正如其他人所指出的 - 学习像杰克逊这样的 JSON 框架。然后使用
ObjectMapper将您的 JSON 转换为对象。 @Oleg 表示您可以使用:new ObjectMapper().readValue(data, FullyTypedThing.class)- 如果您想读取数组,只需将该类的数组传递给相同的方法,如:new ObjectMapper().readValue(data, FullyTypedThing[].class -
您可能还需要根据您的要求配置
ObjectMapper(Jackson 有几个选项)。但我认为刚刚开始 - 然后尝试通过调用#configure(..)和#setVisibility(..)方法来调整ObjectMapper。
标签: java json nested deserialization