我有以下 Item 类:
public class Item {
public Object item;
}
我使用 GSON 将 JSON 插入到该对象中。
tmp=
{
"_id": {
"$oid": "5076371389d22e8906000000"
},
"item": {
"values": [
{
"value1": [
4958,
3787,
344
],
"value2": [
4,
13,
23
]
}
],
"name": "item1"
}
}
Java 位:
Item item = new Item();
Gson g = new Gson();
it = g.fromJson(tmp.toString(), Item.class);
it.item
变为 StringMap
类型 ( http://code.google.com/p/google-gson/source/browse/trunk/gson/src/main/java/com/google/gson/internal/StringMap.java?r=1131 )
我现在需要访问该对象内的子对象。 我可以使用此类型的重写 toString 函数来打印该对象中的所有对象。但我怎样才能浏览它呢? 附:我将所有内容放入对象数据类型而不是结构化类的原因是 JSON 结构每次都不同,因此我无法真正拥有类模式。 有什么建议吗?
最佳答案
您应该创建一个反射(reflect) JSON 的对象结构(因为这正是您想要做的)。对于您的示例,您可以使用以下内容:
public class MyObject {
private Item item;
private String _id;
// getters, setters, etc.
}
public class Item {
private List<Value> values;
private String name;
// getters, setters, etc.
}
public class Value {
private List<Integer> values1;
private List<Integer> values2;
// getters, setters, etc.
}
然后将MyObject.class
传递给Gson:
MyObject myObj = g.fromJson(tmp.toString(), MyObject.class);
您可以像这样获取values
中的列表:
List<Integer> values1 = myObj.getItem().getValues().get(0).getValues1();
List<Integer> values2 = myObj.getItem().getValues().get(0).getValues2();
尝试一下,看看是否有效。
另外,你应该看看我对类似问题的回答 here ,特别是最后关于如何基于某些 JSON 对象为 Gson 编写对象结构的部分。
关于Java Gson将json序列化为对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12848146/