2015-07-08 3 views
1

У меня есть некоторые JSON так:Java - Получить значение переменного типа из JSONObject

{"result":[{"job":{"type":"Employee","title":"","occupation":"Underwater Basket Weaver"}}]} 

я получаю значение Оккупации как так:

import org.json.JSONArray; 
import org.json.JSONObject; 

String occupation = null; 

JSONArray resultArray = obj.getJSONArray("result"); 
JSONObject firstResult = resultArray.getJSONObject(0); 
occupation = firstResult.getJSONObject("job").getString("occupation"); 

Однако, по какой-то причине, рода занятия Значение не всегда равно String. Я предполагаю, что это может быть int, или это может быть null. В итоге я получаю исключение:

org.json.JSONException: JSONObject ["оккупация"] не строка. в org.json.JSONObject.getString (JSONObject.java:658)

Что вы должны делать, когда вы имеете дело с JSONObjects, которые принимают на типы переменных данных?

+0

Вы, возможно, придется проверить, если 'GetString ("Оккупация")' действует с 'IsNull (String)'. Согласно http://www.json.org/javadoc/org/json/JSONObject.html#getString(java.lang.String), 'getString (...)' генерирует исключение, если оно не найдено ни одного – Robb

ответ

1

Примените это получить все типы данных в формате строки

occupation = firstResult.getJSONObject("job").get("occupation").toString(); 
+0

Это будет иметь NullPointerException, если 'firstResult.getJSONObject (« job »). Get (« оккупация »)' возвращает значение null. –

+0

Итак, вы делаете эту жирную вещь все время? –

1

Это ваш первоначальный Json:

{"result":[{"job":{"type":"Employee","title":"","occupation":"Underwater Basket Weaver"}}]} 

когда вы делаете это:

JSONArray resultArray = obj.getJSONArray("result"); 

Вы получаете:

[{"job":{"type":"Employee","title":"","occupation":"Underwater Basket Weaver"}}] 

Тогда:

JSONObject firstResult = resultArray. getJSONObject (0);

Вы получаете:

{"job":{"type":"Employee","title":"","occupation":"Underwater Basket Weaver"}} 

Следующая:

firstResult.getJSONObject("job") 

Продукция:

{"type":"Employee","title":"","occupation":"Underwater Basket Weaver"} 

Чтобы закончить, это вы хотите получить оккупационный Используйте значение: Get (» оккупация ").

1

Вы могли бы сделать

String occupation = String.valueOf(firstResult.getJSONObject("job").get("occupation")); 

если поле occupation всегда имеет значение (не массив или другой объект JSON).