2014-12-28 3 views
0

안드로이드에서 JSONObject.get (key)는 객체 값을 반환합니다. 각 값은 포함 된 데이터 유형에 따라 다르게 처리하고 싶습니다.안드로이드에서 JSONObject에 값 유형 가져 오기, 객체 구조 표시

{ 
    "string": "example" 
, "object": { 
    "zero": 0 
    , "one": 1 
    , "two": 2 
    } 
} 

이 다른 유형 (string, object, integer)의 값을 정의 : 내 베어 본 시험에서

, 나는 AndroidManifest.xml을 같은 폴더에 assets라는 이름의 폴더에이 같은 JSON 파일이 .

내 Android 앱에서는이 파일을 읽고 JSONObject으로 변환 할 수 있음을 알고 있습니다.

try { 
    AssetManager manager = context.getAssets(); 

    // Find the file at PROJECT_FOLDER/app/src/main/assets/myfile.json 
    InputStream is = manager.open("myfile.json"); 

    int size = is.available(); 
    byte[] buffer = new byte[size]; 
    is.read(buffer); 
    is.close(); 

    String jsonString = new String(buffer, "UTF-8"); 
    Log.d("TAG", jsonString); 

    JSONObject json = new JSONObject(jsonString); 

} catch (Exception ex) { 
    ex.printStackTrace(); 
} 

나는 또한 내가 개별적으로 JSONObject의 각 키를 처리하는 반복자를 사용할 수 있다는 것을 알고.

private void dump(JSONObject json) throws JSONException { 
    Iterator<String> iterator = json.keys(); 

    while (iterator.hasNext()) { 
    String key = iterator.next(); 
    Object value = json.get(key); 

    Log.d(key, " = "+value.toString()); // CHANGE TO GO HERE 
    } 
} 
I은 ​​ value 자체에게 JSONObject이며, 만약 그렇다면 I는 전체 객체의 구조를 기록 할 수 있도록, 반복적으로 dump() 메소드를 호출하는지 확인하고자

. @Michael 아론 SAFYAN 및 @royB의 입력에 따라


편집

, 나는 이제 다음 dump() 방법이있다. 다음과 같이

private String dump(JSONObject json, int level) throws JSONException { 
    Iterator<String> iterator = json.keys(); 
    String output = ""; 
    String padding = ""; 

    for (int ii=0; ii<level; ii++) { 
     padding += " "; 
    } 

    while (iterator.hasNext()) { 
     String key = iterator.next(); 
     Object value = json.get(key); 

     if (value instanceof JSONObject) { 
      output += "\r"+key+": "+dump((JSONObject) value, level+1); 
     } else { 
      output += "\r"+padding+key+": "+value; 
     } 
    } 

    return output; 
} 

이 내 시험에서 된 JSONObject를 기록

object: 
    zero: 0 
    two: 2 
    one: 1 
string: example 
+1

당신은 변수 x "가 된 JSONObject"에서 상속 실행시의 형태가 있는지 확인하기 위해 "X instanceof를 된 JSONObject"를 사용할 수와 동일하게 제공

/** * Returns the value mapped by {@code name} if it exists and is a {@code * JSONObject}, or null otherwise. */ public JSONObject optJSONObject(String name) { Object object = opt(name); return object instanceof JSONObject ? (JSONObject) object : null; } 

: 단지에 대한 코드는 것을 알 수 있습니다. –

답변

1

당신은 instanceOf을 시도하거나 인스턴스가 된 JSONObject가 아닌 경우 된 JSONObject를 돌려줍니다 obj.optJSONObject(key)을 시도 할 수 있습니다. 당신에게 instanceof를

관련 문제