2017-05-16 4 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)는 당신에게 주요 배열에서 첫 번째 요소를 얻을 것이다 . 이 첫 번째 요소는 두 개의 속성 politicslocation이있는 JSON 객체입니다. politics 속성의 배열 값 안에있는 값에 관심이있는 것 같습니다. 해당 배열을 얻으려면 ((JSONArray)((JSONObject)array.get(0)).get("politics"))을 사용해야합니다.

두 번째로, 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 객체로 변환하고 작업을 수행하는 것입니다.

자바 오브젝트 사용 추적 코드로 변환 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 
관련 문제