如何将String结果从JSON URL拆分为单个java对象

时间:2013-10-09 11:19:21

标签: java json gson

我编写了返回JSON url数据的代码。 数据存储为String,这是输出的示例;

{

"status": "success",

"records": [

    {
        "timestamp": 1381312251599,
        "deviceId": "288",
        "temperature": 17
    },

    {
        "timestamp": 1381312281599,
        "deviceId": "288",
        "temperature": 17
    },

    {
        "timestamp": 1381312311599,
        "deviceId": "288",
        "temperature": 17
    }
]
}

以下是用于获取此信息的代码示例;

String jsonString = callURL("http://localhost:8000/eem/api/v1/metrics/temperature/288");
System.out.println(jsonString);

我需要帮助的是创建一个Status字段,然后创建一个记录数组,它将保存Timestamp,DeviceId,Temperature和那些值。

我试过看GSON,但我无法理解

如果有人有任何帮助,那就太棒了,谢谢

3 个答案:

答案 0 :(得分:0)

这很简单。你应该创建一个与你的json结构匹配的java类。

e.g。

public class Response {
     String status;
     List<Record> records;
}

public class Record {
     long timestamp;
     int deviceId;
     int temperature;
}

而不是将你的json和Response.class提供给gson。

答案 1 :(得分:0)

我使用杰克逊,这很简单。

您需要创建与jsonString具有相同属性的适当java类。

你需要创建像这样的东西

class Record {
   private Long timestamp;
   private Integer deviceId;
   private Integer temperature;

   // getters and setters ...
}

class Response {

  private String status;
  private List<Record> records;

   // getters and setters ...

}

然后

ObjectMapper mapper = new ObjectMapper();
return mapper.readValue(jsonString, Response.class);

答案 2 :(得分:0)

复制,粘贴并运行:

package stackoverflow.questions;

import java.util.List;

import com.google.gson.Gson;

public class Question {

    class Record {
        Long timestamp;
        String deviceId;
        Long temperature;
    }

    class Container {
        List<Record> records;
    }

    public static void main(String[] args) {
        String json = "{ \"status\": \"success\", \"records\": [{\"timestamp\": 1381222871868,\"deviceId\": \"288\",\"temperature\": 17 },{\"timestamp\": 1381222901868,\"deviceId\": \"288\",\"temperature\": 17 },{\"timestamp\": 1381222931868,\"deviceId\": \"288\",\"temperature\": 17 } ]} ";

        Gson g = new Gson();
        Container c = g.fromJson(json, Container.class);
        for (Record r : c.records)
            System.out.println(r);

    }
}