使用GSON的JSON到POJO。帮助需要建模数据

时间:2016-01-12 16:34:09

标签: java json gson

我提供了一个减少的JSON对象,我试图将其转换为Java POJO。我已经重命名了名称/值对以保持简单。

public class Content {
public String name1;
public Name2 name2;
public String name3;
}
public class Name2 {
public List <Name2Data> = new ArrayList <>();
}

public class Name2Data {
    public String value1;
    public String value2;
    public Integer integer1;
}

以前我使用GSON“fromJson”来转换类似的对象。努力找出正确的阶级代表,并希望有人能帮助我。我遇到的问题是JSON名称值对“name2”。 (name2中可以包含一个或多个JSON数组)。

我尝试过如下表示,但这无法正常工作。

{{1}}

任何帮助如何正确建模或建议是否有更好的方法将不胜感激。 提前谢谢。

2 个答案:

答案 0 :(得分:0)

JSON示例的name2是一个包含数组的数组,而这些数组又包含数组。

List<List<List>> name2 = new ArrayList<>();

可能会奏效。列表列表,其中包含包含多个类型值的列表。

如果我错了,请纠正我。这很快就会让人感到困惑。此刻,我无法对此进行测试。

如果您要使用JSON对象而不是最内层的数组,则可以使用

List<List<InnerData>> name2 = new ArrayList<>();

其中InnerData是一个适合对象版本的模型 ["string1", "string2", 1]例如:

{
    "string1": "string1",
    "string2": "string2",
    "anInt": 1
}

答案 1 :(得分:0)

编辑

JSON设计非常糟糕。

答案

以下是一些课程

<强> Main.java

import com.google.gson.Gson;

public class Main
{
    public static void main(
        String[] args)
    {
        DataObject dataObject;
        final Gson gson = new Gson();
        final String nuttyJson = "{\"content\": { \"name1\": \"value1\", \"name2\": [ [ [\"string1\", \"string2\", 1], [\"string3\", \"string4\", 2] ], [ [\"string5\", \"string6\", 3], [\"string7\", \"string8\", 4] ] ], \"name3\": \"value3\" } }";

        dataObject = gson.fromJson(nuttyJson, DataObject.class);

        dataObject = null;
    }
}

<强> DataObject.java

public class DataObject
{
    private Content content;

    private class Content
    {
        private String name1;
        private Object[][][] name2;
        private String name3;

        public String getName1()
        {
            return name1;
        }

        public Object[][][] getName2()
        {
            return name2;
        }

        public String getName3()
        {
            return name3;
        }

        public void setName1(
            final String newValue)
        {
            name1 = newValue;
        }

        public void setName2(
            final Object[][][] newValue)
        {
            name2 = newValue;
        }

        public void setName3(
            final String newValue)
        {
            name3 = newValue;
        }
    }

    public Content getContent()
    {
        return content;
    }


    public void setContent(
        Content content)
    {
        this.content = content;
    }
}