2016-04-11 11 views
0

URLからJSONデータを取得していて、ウェブサイトにデータを表示したいとします。私は正常にJSON階層(JSONオブジェクト)のデータを除くすべてのJSONデータを表示しています。 JSONArray personerrorデータにアクセスできます。しかし、階層(JSONオブジェクト)updatedデータにアクセスすることができません。JavaでJSONデータのネストされた要素にアクセスする方法は?

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(); 
    } 
} 
} 
+0

ここではちょっと混乱していますが、更新されたdatetimeオブジェクトを返すように 'updated'へのアクセスを希望しますか? –

+1

何のエラーが出ますか? 'StackTrace'メッセージを追加してください。具体的にする。私の経験によれば、いくつかの 'ClassNotFound Exception'があるかもしれません。 @ Shubham –

+0

あなたの問題に対する解決策を追加しましたが。あなたはこれをチェックアウトすることができます.. @ Shubham –

答えて

0

この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 genreJsonとしてStringに格納されているとします。

私はあなたの問題を解決するために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. 

} 
0

あなたがコメントで何の問題も書き込みに直面している場合、これは、正常に動作します。この

public static String[] getInfo(String url) 
{ 
    String result=//I am assuming your json response is in result 
    String[] titles=null; 
    try { 
     JSONObject jsonObject=new JSONObject(result); 
     JSONObject temp=null; 
     JSONArray jsonArray=jsonObject.getJSONArray("person"); 
     int length=jsonArray.length(); 
     person=new String[length]; 
     for (int i=0;i<length;i++){ 
      temp= (JSONObject) jsonArray.get(i); 
      titles[i]=temp.getString("name")+temp.getString("city"); 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return titles; 
} 

を試してみてください。

関連する問題