![](/img/trans.png)
[英]Trying to create json object in Java but getting nested array? How to do it in a better way?
[英]How to create JSON in a better way for the below sample
我在哈希圖中有以下數據
{age={Middle-aged={yes=0.417, no=0.125}, youth={yes=0.25, no=0.5}, senior={yes=0.333, no=0.375}}}
我如何將此哈希圖轉換為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的所有值(中年,老年人,青年)
然后創建一個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<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);
這樣,您可以使同一數據表示的結構更扁平,這對於每個處理此數據的人都是有益的。
下面的結構將有助於獲取所需的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字符串。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.