Как разбирать объект JSON в Android
У меня возникают проблемы с вытаскиванием значений из объекта JSON. Вот мой код
try {
JSONObject json = new JSONObject(result);
JSONObject json2 = json.getJSONObject("results");
test = json2.getString("name");
} catch (JSONException e) {
e.printStackTrace();
}
test
объявляется как String
. Когда код запускается, он показывает null
. Если я нахожусь над json2
в режиме отладки, я могу видеть все значения и имена внутри объекта.
Я также пробовал
test = json2.length();
Это вернуло test = 0
. Даже когда я наводил объект json2
, я мог читать значения внутри объекта.
Вот пример строки JSON, которую я буду использовать.
{
"caller":"getPoiById",
"results":
{
"indexForPhone":0,
"indexForEmail":"NULL",
"indexForHomePage":"NULL",
"indexForComment":"NULL",
"phone":"05137-930 68",
"cleanPhone":"0513793068",
"internetAccess":"2",
"overnightStay":"2",
"wasteDisposal":"2",
"toilet":"2",
"electricity":"2",
"cran":"2",
"slipway":"2",
"camping":"2",
"freshWater":"2",
"fieldNamesWithValue":["phone"],
"fieldNameTranslations": ["Telefon"],
"id":"1470",
"name":"Marina Rasche Werft GmbH & Co. KG",
"latitude":"52.3956107286487",
"longitude":"9.56583023071289"
}
}
Ответы
Ответ 1
В конце концов я решил это, используя JSONObject.get
, а не JSONObject.getString
, а затем нарисуйте test
на String
.
private void saveData(String result) {
try {
JSONObject json= (JSONObject) new JSONTokener(result).nextValue();
JSONObject json2 = json.getJSONObject("results");
test = (String) json2.get("name");
} catch (JSONException e) {
e.printStackTrace();
}
}
Ответ 2
Взгляните на http://developer.android.com/reference/org/json/JSONTokener.html
Это может решить вашу проблему.
Ответ 3
В вашем формате JSON у него нет начального объекта JSON
Вроде:
{
"info" : <!-- this is starting JSON object -->
{
"caller":"getPoiById",
"results":
{
"indexForPhone":0,
"indexForEmail":"NULL",
.
.
}
}
}
Над Json начинается с info
как объект JSON. Поэтому при выполнении:
JSONObject json = new JSONObject(result); // create JSON obj from string
JSONObject json2 = json.getJSONObject("info"); // this will return correct
Теперь мы можем получить доступ к полю result
:
JSONObject jsonResult = json2.getJSONObject("results");
test = json2.getString("name"); // returns "Marina Rasche Werft GmbH & Co. KG"
Я думаю, что этого не было, поэтому проблема была решена, когда мы используем JSONTokener
как ваш ответ.
Ваш ответ очень хорош. Просто я думаю, что добавляю эту информацию, поэтому я ответил
Спасибо
Ответ 4
JSONArray jsonArray = new JSONArray(yourJsonString);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject obj1 = jsonArray.getJSONObject(i);
JSONArray results = patient.getJSONArray("results");
String indexForPhone = patientProfile.getJSONObject(0).getString("indexForPhone"));
}
Перейдите в JSONArray, затем конвертируйте в JSONObject.