Java Gson将json序列化为对象

标签 java json gson

我有以下 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/

相关文章:

java - Android更改recyclerview中所有项目中的textview而不重绘整个列表

java - 使用 thymeleaf 将上下文绑定(bind)到 html 模板时出错

java - 为什么Gson fromJson会抛出JsonSyntaxException : Expected BEGIN_OBJECT but was BEGIN_ARRAY?

java - Android:如何从对象名称可能更改的 JSON 响应中检索多个 JSON 对象?

ios - 尝试将 AlamoFire JSON 响应映射到类并接收 "Fatal Error: Unexpectedly found nil while unwrapping optional"

java - 在GSON中,有没有办法将内部类中的字段反序列化到父类中?

java - 集合 <接口(interface)> 名称 = null;

java - 使用Spring Cloud Gateway时如何处理404错误

java - Android:无法显示 JSON 数据,原因未知

javascript - 如何将json解析成嵌套的html列表结构