2013-06-04 89 views
0

我試圖解析JSON使用jsontokener 這是我的jsontokener代碼:的Android解析JSON對象使用jsontokener

try { 
     JSONObject jObj = (JSONObject) new JSONTokener(strJson).nextValue(); 
     String query = jObj.getString("query"); 
     JSONArray location = jObj.getJSONArray("locations"); 
     TextView tv = (TextView) findViewById(R.id.dummy_text); 
     tv.setText(query); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     TextView tv = (TextView) findViewById(R.id.dummy_text); 
     tv.setText("Wrong"); 
    } 

這是我第一次strJson:

 String strJson = "{" 
      + " \"query\": \"Pizza\", " 
      + " \"locations\": [ 94043, 90210 ] " 
      + "}"; 

,它會顯示

比薩

,我試圖改變strJson是這樣的:

 String strJson = "{" 
      + " \"component\": " 
       + "{" 
        + " \"query\": \"Pizza\", " 
        + " \"locations\": [ 94043, 90210 ] " 
       + "}" 
      + "}"; 

,它會顯示

錯誤

意味着代碼輸入捕捉。 請幫助我如何提高我的代碼,以便它可以在組件中查詢。

回答

1

finnaly我找到了答案,我只是提高代碼是這樣的:

try { 
     JSONObject jObj = (JSONObject) new JSONTokener(strJson).nextValue(); 
     JSONObject obj = jObj.getJSONObject("component"); 
     String query = obj.getString("query"); 
     //JSONArray location = jObj.getJSONArray("locations"); 
     TextView tv = (TextView) findViewById(R.id.dummy_text); 
     tv.setText(query); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
     TextView tv = (TextView) findViewById(R.id.dummy_text); 
     tv.setText("Wrong"); 
    } 
1

正常情況下沒有必要直接使用JSONTokener類。這實際上只是JSONObject的一個Helper類。只需直接從字符串創建一個新的JSON對象

try {  
    JSONObject component = new JSONObject(strJson).getJSONObject("component"); 
    String query = component.getString("query"); 
    JSONArray locations = component.getJSONArray("locations"); 
    // Do something ... 

} catch(JSONException e) { 
    // Do something ... 
}