2013-05-15 75 views
0

我有JSON格式的字符串。例如:如何從混合類型json中獲取值?

{ 
    "blockedStatus":true, 
    "cars":[ 
     "RAW:123", 
     "TVU:123" 
    ], 
    "phones":[ 
     "370665566", 
     "3706324231" 
    ] 
} 

這是從服務器輸出的。我需要得到獨立的價值觀,但我不知道如何去做。

嘗試這樣:

BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent(), "UTF-8")); 
StringBuilder builder = new StringBuilder(); 
for (String line = null; (line = reader.readLine()) != null;) { 
       builder.append(line).append("\n"); 
} 

JSONTokener tokener = new JSONTokener(builder.toString());    
JSONArray finalResult = new JSONArray(tokener); 
Log.e("IO-OUTPUT", builder.toString()); //prints json output 
Log.e("finalResult (1)", finalResult.getString(1)); 

,但我得到的螞蟻異常:

W/System.err(31249): org.json.JSONException: Value {"blockedStatus":true,"cars":["RAW"],"phones":["65431"]} of type org.json.JSONObject cannot be converted to JSONArray 

是否有另一種方式來獲得價值?由於計算符號和獲取值從它會太硬

+1

有一些非常好的JSON工作庫,可以讓您的生活變得更輕鬆,特別是當您的域模型發生變化並且需要更新JSON時因此。看看Gson或Jackson。 – Simon

+0

Gson是一個非常棒的工作,可以節省時間。 – slhddn

+0

查看json-io,一個相對較小的庫〜100K,除JDK之外沒有其他依賴項。它受Android開發人員的歡迎。 https://github.com/jdereg/json-io –

回答

0

變化

JSONTokener tokener = new JSONTokener(builder.toString());    
JSONArray finalResult = new JSONArray(tokener); 

JSONObject jsonObject = new JSONObject(builder.toString());    
JSONArray carsResult = jsonObject.getJSONArray("cars"); 
JSONArray phoneResult = jsonObject.getJSONArray("phones"); 

你的字符串rapresent一個JSONObject其中包含兩個JSONArray的,carsphones,和配對鍵/值blockedStatus

另外,如果你讀了logcat的,它說:

type org.json.JSONObject cannot be converted to JSONArray 

您不能轉換JSONObjectJSONArray,這意味着你有一個JSONObject

+1

非常感謝您節省我的時間!剛剛添加catch語句,它的工作。 – Ragaisis

+0

您是否可以將答案標記爲fuutre引用的接受? – Blackbelt

0

試試這個

HttpClient client = new DefaultHttpClient(); 
HttpGet request = new HttpGet(); 
request.setURI(new URI(url)); 
HttpResponse response = client.execute(request); 
InputStream ips = response.getEntity().getContent(); 
responseString = response.toString(); 
responseString = intputStreamToStringConvertor(ips); 
JSONObject object = new JSONObject(responseString); 
Boolean status = object.getBoolean("blockedStatus"); 
JsonArray cars = object.getJSONArray("cars"); 
JsonArray phones = object.getJSONArray("phones");