2017-05-16 21 views
0

javaの単純なjsonの解析に問題があります。ここにjsonのサンプルがあります。json配列内のjson配列の解析に問題がある

[ 
    { 
    "politics": [ 
     { 
     "type": "admin2", 
     "friendly_type": "country", 
     "name": "United States", 
     "code": "usa" 
     }, 
     { 
     "type": "admin6", 
     "friendly_type": "county", 
     "name": "Gratiot", 
     "code": "26_057" 
     }, 
     { 
     "type": "constituency", 
     "friendly_type": "constituency", 
     "name": "Eighth district, MI", 
     "code": "26_08" 
     }, 
     { 
     "type": "admin6", 
     "friendly_type": "county", 
     "name": "Clinton", 
     "code": "26_037" 
     }, 
     { 
     "type": "admin4", 
     "friendly_type": "state", 
     "name": "Michigan", 
     "code": "us26" 
     }, 
     { 
     "type": "constituency", 
     "friendly_type": "constituency", 
     "name": "Fourth district, MI", 
     "code": "26_04" 
     } 
    ], 
    "location": { 
     "latitude": 43.111976, 
     "longitude": -84.71275 
    } 
    } 
] 

これで正しいjsonインデックスが得られます。

JSONParser parser = new JSONParser(); 
Object obj = parser.parse(output); 
JSONArray array = (JSONArray)obj; 
String jsonobj = array.get(0).toString(); 
{"politics":[{"code":"usa","name":"United States","type":"admin2","friendly_type":"country"},{"code":"26_057","name":"Gratiot","type":"admin6","friendly_type":"county"},{"code":"26_08","name":"Eighth district, MI","type":"constituency","friendly_type":"constituency"},{"code":"26_037","name":"Clinton","type":"admin6","friendly_type":"county"},{"code":"us26","name":"Michigan","type":"admin4","friendly_type":"state"},{"code":"26_04","name":"Fourth district, MI","type":"constituency","friendly_type":"constituency"}],"location":{"latitude":43.111976,"longitude":-84.71275}} 

しかし、私はそれからする属性を取得するように見える傾けます。

JSONObject obj1 = new JSONObject(jsonobj); 
String n = obj1.getString("admin4"); 
System.out.println(n); 

私はこのjsonから必要なのはミシガン州です。どこが間違っていますか? ヘルプは本当に感謝しています。

答えて

0

まず、array.get(0)がメインアレイからあなたの最初の要素を取得します。この最初の要素は、2つのプロパティpoliticslocationを持つJSONオブジェクトです。 politicsプロパティの配列値の中にある値に興味があるようです。この配列を取得するには、((JSONArray)((JSONObject)array.get(0)).get("politics"))を使用する必要があります。

第2に、admin4はプロパティではなく、実際にはtypeプロパティの値です。あなたはそれを見つけるために配列をループする必要があります。ここで

は完全な例である:

JSONParser parser = new JSONParser(); 
Object obj = parser.parse(output); 
JSONArray array = (JSONArray)obj; 
JSONArray politics = ((JSONObject)array.get(0)).get("politics")); 
JSONObject obj = null; 
for(int i = 0; i < politics.size(); i++){ 
    if(((JSONObject)politics.get(i)).getString("type").equals("admin4")){ 
     obj = ((JSONObject)politics.get(i)); 
    } 
} 
if(obj != null){ 
    // Do something with the object. 
} 

あなたがsimple jsonライブラリを使用しているようです。私はそれが.get("politics").getJSONObject("politics")かどうかを正確に覚えていません。私の例ではメソッド名に間違いがあるかもしれません。

+0

は今、あなたは、配列を反復しなければならないキーを使用して値を取得するために、以下に示すよう。どうもありがとうございます。 –

0

jsonオブジェクトの検索や他の操作を簡略化する最適なソリューションは、json文字列をJavaオブジェクトに変換して操作することです。 Javaオブジェクトの使用フォローコードへの変換のJSON文字列のための

import org.codehaus.jackson.map.ObjectMapper; 
    import org.json.JSONException; 
    import org.json.JSONObject; 

YourObject myObject; 
ObjectMapper mapper = new ObjectMapper(); 
try{ 
    myObject= mapper.readValue(jsonData, myObject.class); 
} 
catch (Exception e) { 
    e.printStackTrace(); 
} 

例えば、あなたのクラスのお尻のフォローを定義します。

public class myObject{ 

     private List<Politics> politics; 
     private Location location; 
     // define getters and setters 
} 

define Politics and Location class: 

public class Politics 
{ 
     String type; 
     String friendly_type; 
     String name; 
     String code; 
     // define getters and setters 
} 

public class Location 
{ 
    String latitude; 
    String longitude; 
    // define getters and setters 
} 
0

これは、JSONオブジェクトの内部要素を取得しようとしているからです。 は、あなたがさらにJSONオブジェクトで構成するJSONArrayオブジェクトを取得します

JSONObject obj1 = new JSONObject(jsonobj); 
JSONArray arr = (JSONArray) obj1.getObject("politics"); 

を試してみてください。

今出力を提供します
for(int i=0; i<arr.size(); i++){ 
    JSONObject obj = arr.getJSONArray(i); 
    System.out.println(obj.getString("type")); 
} 

::この作品

admin2 
admin6 
constituency 
admin6 
admin4 
constituency