我从网址获取JSON数据,并且想要在我的网站上显示数据。我成功显示了除JSON层次结构(JSON对象)数据以外的所有JSON数据。我能够访问JSONArray personerror数据。但是,我无法访问层次结构(JSON对象)updated数据。

我要访问updated.time

import java.io.IOException;
import java.net.URL;
import org.apache.commons.io.IOUtils;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.JSONValue;
import org.json.simple.parser.ParseException;

public class ParseJson1 {

public static void main(String[] args) {
    String url = "http://freemusicarchive.org/api/get/genres.json?api_key=60BLHNQCAOUFPIBZ&limit=2";
    /*
   {
"person": [
    {
        "name": "John",
        "city": "Mumbai"
    },
    {
        "name": "Rahul",
        "city": "Delhi"
    },
    {
        "name": "Sanjana",
        "city": "Amritsar"
    },
    {
        "name": "Anjali",
        "city": "Hyderabad"
    },
    {
        "name": "Mukund",
        "city": "Bangalore"
    },
    {
        "name": "Raunak",
        "city": "Patna"
    }
],
"updated": {
    "time": "14:17:48",
    "date": "2016-04-10"
},
"error": "2353"
}

 */

    try {
        String genreJson = IOUtils.toString(new URL(url));
        JSONObject genreJsonObject = (JSONObject) JSONValue.parseWithException(genreJson);
        // get the error
        System.out.println(genreJsonObject.get("error"));

        //Get Array Values
        JSONArray genreArray = (JSONArray) genreJsonObject.get("person");
        // get the first genre
        JSONObject firstGenre = (JSONObject) genreArray.get(0);
        System.out.println(firstGenre.get("name"));
        // get the Second
        JSONObject firstGenre = (JSONObject) genreArray.get(1);
        System.out.println(firstGenre.get("name"));
        // get the third
        JSONObject firstGenre = (JSONObject) genreArray.get(2);
        System.out.println(firstGenre.get("city"));


    } catch (IOException | ParseException e) {
        e.printStackTrace();
    }
}
}

最佳答案

此json结果显示您从api URL获得的结果。对 ??

 {
   "person":[
      {
         "name":"John",
         "city":"Mumbai"
      },
      {
         "name":"Rahul",
         "city":"Delhi"
      },
      {
         "name":"Sanjana",
         "city":"Amritsar"
      },
      {
         "name":"Anjali",
         "city":"Hyderabad"
      },
      {
         "name":"Mukund",
         "city":"Bangalore"
      },
      {
         "name":"Raunak",
         "city":"Patna"
      }
   ],
   "updated":{
      "time":"14:17:48",
      "date":"2016-04-10"
   },
   "error":"2353"
}


现在,这是一个代码,该代码如何迭代或解析您的json对象。我假设以上结果json根据您的代码存储在String变量String genreJson中。


  在这里,我写了一个method来解决您的问题。您可以参考它,也可以尝试自己的代码。


public void testYourJSON(String genreJson){

    JSONParser parser=new JSONParser();  //parser used to parse String to Correct Json format.

    JSONObject obj_ComplexData = (JSONObject) parser.parse(genreJson); // Now Your String Converted to a JSONObject Type.

     //person tag Array Data is fetched and Stored into a JSONArray Object.
    JSONArray obj_arrayPersonData = (JSONArray) parser.parse(obj_ComplexData.get("person").toString());

    for (Object person : obj_arrayPersonData ) { //Iterate through all Person Array.
           System.out.println(person.get("name"));
           System.out.println(person.get("city"));
    }

    //Select "updated" Tag Json Data.
    JSONObject obj_Updated = (JSONObject) parser.parse(obj_ComplexData.get("updated").toString());

    System.out.println(obj_Updated.get("time")); //display time tag.
    System.out.println(obj_Updated.get("date")); //display date tag.


    System.out.println(obj_Updated.get("error")); //display Your Error.

}

10-07 19:15
查看更多