2013-05-15 4 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 соответственно. Взгляните на Гссона или Джексона. – 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 «с, cars и phones, и пара ключ/значение blockedStatus.

Кроме того, если вы читали LogCat, он говорит:

type org.json.JSONObject cannot be converted to JSONArray 

Вы не можете преобразовать JSONObject к JSONArray, что означает, что у вас есть JSONObject

+1

Большое спасибо за сохранение моего времени! Просто добавлена ​​уловка, и она сработала. – 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"); 
Смежные вопросы