如何以更好的方式为下面的示例创建JSON

时间:2014-12-25 02:33:38

标签: java json

我在hashmap中有以下数据

{age={Middle-aged={yes=0.417, no=0.125}, youth={yes=0.25, no=0.5}, senior={yes=0.333, no=0.375}}}

如何将此hashmap转换为json

以下
{"age":{"data":[{"key":"yes","values":[{"name":"Middle-aged","value":0.417},{"name":"youth","value":0.25},{"name":"senior","value":0.33}]},{"key":"no","values":[{"name":"Middle-aged","value":0.125},{"name":"youth","value":0.5},{"name":"senior","value":93}]}]}}

要这样做,我是否需要像这样分组我的数据

是 - 所有是的价值观(中年,大四,青年)

No-grp没有(中年,大四,青年)的价值

然后创建一个POJO类? 或者我可以直接加载到POJO类。

请建议一个更好的方法。

2 个答案:

答案 0 :(得分:0)

您可以使用POJO对结构进行建模,以转换为扁平结构:

public class MyData{
    private String groupName;
    private String yesNoGroup;
    private double value;
    public MyData(String n, String g, double v){
        groupName=n;
        yesNoGroup=g;
        value=v;
    }
    // getter and setters
}

然后使用GSON或Jackson

将它们转换为JSON字符串

除了转换之外,我建议您将数据转换为更扁平的结构。您现在看起来像一个规范化的数据库模式,但这在JSON中创建了太多层。如果你可以对它进行非规范化并给出比#34; value"," key"更好的名字。等等,JSON将更易读,更容易转换。

{
    "age":{
        "data":[
            {
                "key":"yes",
                "values":[
                    {
                        "name":"Middle-aged",
                        "value":0.417
                    },
                    {
                        "name":"youth",
                        "value":0.25
                    },
                    {
                        "name":"senior",
                        "value":0.33
                    }
                ]
            },
            {
                "key":"no",
                "values":[
                    {
                        "name":"Middle-aged",
                        "value":0.125
                    },
                    {
                        "name":"youth",
                        "value":0.5
                    },
                    {
                        "name":"senior",
                        "value":93
                    }
                ]
            }
        ]
    }
}

这样的样本数据可以从" MyData"的构造函数中创建。像

List<MyData> list=new List<MyData>();
list.add(new MyData("Middle-aged","yes",0.417));
list.add(new MyData("youth","yes",0.25));
list.add(new MyData("senior","yes",0.33));
list.add(new MyData("Middle-aged","no",0.125));
list.add(new MyData("youth","no",0.5));
list.add(new MyData("senior","no",93));

Gson g=new Gson();
String output=g.toJson(list);

通过这种方式,您可以拥有相同数据表示的更平坦的结构,这对处理此数据的每个人都有好处。

答案 1 :(得分:0)

下面的结构对于获取所需的json结构非常有用。

class Age {
    private List<Data> data;
    //getter setter
}

class Data {
    private String key;
    private List<Values> values;
    //getter setter
}

class Values {
    private String name;
    private String value;
    //getter setter
}

现在遍历您的HashMap并填充Age类对象中的值。然后你可以使用GSON或Jackson将Age对象转换为json字符串。