Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何为下面的示例更好地创建JSON_Java_Json - Fatal编程技术网

Java 如何为下面的示例更好地创建JSON

Java 如何为下面的示例更好地创建JSON,java,json,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":

我在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}]}]}}
为此,我是否需要像这样对数据进行分组

是-grp所有是的价值观(中年、老年、青年)

无grp所有无价值(中年、老年、青年)

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


请建议一种更好的方法。

您可以使用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中的层太多。如果您可以对其进行非规范化,并给出比“值”、“键”等更好的名称,那么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 List=新列表();
添加(新MyData(“中年”、“是”,0.417));
增加(新的MyData(“青年”,“是”,0.25));
列表。添加(新的MyData(“高级”,“是”,0.33));
增加(新的MyData(“中年”,“否”,0.125));
增加(新的MyData(“青年”,“否”,0.5));
添加(新的MyData(“高级”、“否”、93));
Gson g=新的Gson();
字符串输出=g.toJson(列表);

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

下面的结构将有助于获得所需的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并填充class Age对象中的值。然后,您可以使用GSON或Jackson将Age对象转换为json字符串。

您只需要此结构吗?或者您想让它更具可读性?因为有3个值
属性
类标签
差异值
。。。如果您想创建一个hashMap,那么您必须将classLable和distinctValue分组,并将其作为值和属性作为键。@NamanGala:请查看我的更新您期望的json是
{“age”:{“data”:[{“key”:“yes”,“values”:[{“name”:“Middle agreed”,“value”:0.417},{“name”:“youth”,“value”:0.25},{“name”:“senior”,“value”:0.33},{“key”:“no”,“values”:[{“姓名”:“中年”,“价值”:0.125},{“姓名”:“青年”,“价值”:0.5},{“姓名”:“高级”,“价值”:93}]}}}}
?是的,这是我期望的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
}