如何在JSON对象中检索JSON数据?

时间:2013-04-02 13:07:22

标签: java json

我有一个看起来像这样的JSON对象:

"TripList":{
  "noNamespaceSchemaLocation":"http://api.vasttrafik.se/v1/hafasRestTrip.xsd",
  "servertime":"11:27",
  "serverdate":"2013-04-02",
  "Trip":[{
    "Leg":{
      "name":"Spårvagn 3",
      "type":"TRAM",
      "id":"9015014500300079",
      "direction":"Kålltorp",
      "fgColor":"#004b85",
      "bgColor":"#ffffff",
      "stroke":"Solid",
      "accessibility":"wheelChair",
      "Origin":{
        "name":"Brunnsparken, Göteborg",
        "type":"ST",
        "id":"9022014001760004",
        "routeIdx":"19",
        "time":"11:27",
        "date":"2013-04-02",
        "track":"D ",
        "rtTime":"11:31",
        "rtDate":"2013-04-02",
        "$":"\n"
        }

获取Leg对象内的名称工作正常。 但是,如果我想在Origin对象中获取时间,我该怎么做?

到目前为止,我的代码是这样的:

    JSONParser parser = new JSONParser();
    Object obj = parser.parse(Planner.getPlanner().getJsonDataForTrip(Planner.getPlanner().getStartLocationID(), Planner.getPlanner().getDestinationID()));
    JSONObject topObject = (JSONObject) obj;
    JSONObject locationList = (JSONObject) topObject.get("TripList");
    JSONArray array = (JSONArray) locationList.get("Trip");
    Iterator<JSONObject> iterator = array.iterator();

    while (iterator.hasNext()) {

        JSONObject jsonObj = iterator.next();
        jsonObj = (JSONObject) jsonObj.get("Leg");
        String line = (String) jsonObj.get("name");
        Planner.getPlanner().setLines(line);
        System.out.println(jsonObj.get("Origin"));
        Long time = (Long) jsonObj.get("time");
        String track =(String) jsonObj.get("track");

        System.out.println(line);
        System.out.println(time);
        System.out.println(track);

    }

}

And in the console it say like this : 
  

{ “routeIdx”: “19”, “ID”: “9022014001760004”, “rtDate”: “20130402”, “时间”: “15点02分”, “$”: “\ n”,“名称: “Brunnsparken,Göteborg”,“track”:“D”,“rtTime”:“15:06”,“date”:“2013-04-02”,“type”:“ST”}

     

Spårvagn3

     

     

所以基本上我已经得到了Spårvang3这个名字。但我想抽出时间。

因此,我尝试使用jsonObj.get("time");离开的时间正在给出null值。

问题是什么,如何从“Origin”对象中获取时间?

3 个答案:

答案 0 :(得分:2)

由于“时间”是“Origin”对象的一部分,你需要首先提取“Origin” - 对象:

JSONOject origin = (JSONObject) jsonObj.get("Origin");

然后:

String time = origin.getString("time");

答案 1 :(得分:1)

您正在获取'Leg'对象的'time'和'track'属性,而不是'Origin'对象。 它应该是:

    JSONParser parser = new JSONParser();
    Object obj = parser.parse(Planner.getPlanner().getJsonDataForTrip(Planner.getPlanner().getStartLocationID(), Planner.getPlanner().getDestinationID()));
    JSONObject topObject = (JSONObject) obj;
    JSONObject locationList = (JSONObject) topObject.get("TripList");
    JSONArray array = (JSONArray) locationList.get("Trip");
    Iterator<JSONObject> iterator = array.iterator();

    while (iterator.hasNext()) {

        JSONObject jsonObj = iterator.next();
        jsonObj = (JSONObject) jsonObj.get("Leg");
        String line = (String) jsonObj.get("name");
        Planner.getPlanner().setLines(line);
        System.out.println(jsonObj.get("Origin"));

        // Added this line
        jsonObj = (JSONObject) jsonObj.get("Origin");

        String time = (String) jsonObj.get("time");
        String track =(String) jsonObj.get("track");

        System.out.println(line);
        System.out.println(time);
        System.out.println(track);

    }

答案 2 :(得分:0)

执行以下代码

JSONOject origin = (JSONObject) jsonObj.get("Origin");
String time = (String) origin.getString("time");

他们使用SimpleDateFormat来解析时间字符串并获取日期对象