将结构化的扁平json对象解析为对象列表

时间:2015-11-30 02:33:24

标签: java json parsing

我现在有一个Json喜欢:

{  
   "data":{  
      "gatewayId":"asd",
      "records":[  
         {  
            "ms":123,
            "points":[  
               {  
                  "sensorId":"asdasd",
                  "sensorType":"asdasd",
                  "batt" : 12,
                  "kw" : 2
               },
               {  
                  "sensorId":"123",
                  "sensorType":"as123dasd",
                  "batt" : 12,
                  "kw" : 2
               }
            ]
         },
         {  
            "ms":123123,
            "points":[  
               {  
                  "sensorId":"asdasd",
                  "sensorType":"asdasd",
                  "batt" : 12,
                  "kw" : 2
               },
               {  
                  "sensorId":"123",
                  "sensorType":"as123dasd",
                  "batt" : 12,
                  "kw" : 2
               }
            ]
         }
      ]
   },
  "gatewayType":"Asdasd"
}

我的目的是将对象反规范化为Java中的最低级别

pojo在哪里

class SimpleData {
private String gatewayId;
private String gatewayType;
private Long ms;
private String sensorType;
private Double batt;
private Long kw;
}

对于我现在所做的事情,我将json压缩为一个字符串列表,如下所示。

root.gatewayType="Asdasd"
root.data.gatewayId="asd"
root.data.records[0].ms=123
root.data.records[0].points[0].sensorId="asdasd"
root.data.records[0].points[0].sensorType="asdasd"
root.data.records[0].points[0].batt=12
root.data.records[0].points[0].kw=2
root.data.records[0].points[1].sensorId="123"
root.data.records[0].points[1].sensorType="as123dasd"
root.data.records[0].points[1].batt=12
root.data.records[0].points[1].kw=2
root.data.records[1].ms=123123
root.data.records[1].points[0].sensorId="asdasd"
root.data.records[1].points[0].sensorType="asdasd"
root.data.records[1].points[0].batt=12
root.data.records[1].points[0].kw=2
root.data.records[1].points[1].sensorId="123"
root.data.records[1].points[1].sensorType="as123dasd"
root.data.records[1].points[1].batt=12
root.data.records[1].points[1].kw=2

我在想,是否有任何逻辑或库可以解析上面列表中的字符串到SimpleData对象的列表?

抱歉,我的问题可能不清楚,我找到了解决问题的更简单的方法。 但我需要一个库来对json进行反规范化。

例如,如果json是:

{
"a" : "1",
"b" : ["2", "3"]
} 

将成为

[
{
"a" : "1",
"b" : "2"
},
{
"a" : "1",
"b" : "3"
}
]

2 个答案:

答案 0 :(得分:0)

我相信Gson库是您正在寻找的。它提供了将Json数组转换为简单Java对象的简单方法,反之亦然。非常方便,由谷歌开发。

答案 1 :(得分:0)

我推荐fastjson,这非常快且易于使用。在您的情况下,您只需要在结构中将POJO定义为JSON数据并将JSON解析为Object。它是由阿里巴巴创建的。