Josef
Josef

Reputation: 537

How to retrieve JSON data inside an JSON object?

I have a JSON Object that looks like this :

"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"
        }

to get the name inside the Leg object is working fine. But if I wanna get thetime inside the Origin object how do I do that?

My code is like this so far:

    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","time":"15:02","$":"\n","name:"Brunnsparken, Göteborg","track":"D ","rtTime":"15:06","date":"2013-04-02","type":"ST"}

Spårvagn 3

null

null

So basiclly i am getting the name Spårvang 3 already. But I wanna get the time.

so the time that I am trying to get out by using jsonObj.get("time"); is giving a null value.

Whats the problem and how can I get the time from the object "Origin"??

Upvotes: 1

Views: 1041

Answers (3)

lopisan
lopisan

Reputation: 7830

You are getting 'time' and 'track' properties of 'Leg' object, not the 'Origin' object.. It should be:

    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);

    }

Upvotes: 1

Since "Time" is part of the "Origin"-object, you would need to extract the "Origin"-object first:

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

And then:

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

Upvotes: 2

Nirbhay Mishra
Nirbhay Mishra

Reputation: 1648

Do following code

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

them use SimpleDateFormat to parse time string and get date object

Upvotes: 0

Related Questions