2015-08-03 5 views
0

Im пытается разобрать информацию из Википедии. Но у меня проблема. Я не получаю ошибки от try catch, но строка, которую я хочу, равна null. я фактически получил весь JSon, но есть проблемы, разделив их здесь является JSON:Weird JSON Разбор объектов

{ 
    "batchcomplete": "", 
    "query": { 
     "pages": { 
      "280636": { 
       "pageid": 280636, 
       "ns": 0, 
       "title": "Gary Moore", 
       "extract": "Robert William Gary Moore (4 April 1952 – 6 February 2011) was a Northern Irish musician, most widely recognised as a singer and virtuoso guitarist.\nIn a career dating back to the 1960s, Moore played with musicians including Phil Lynott and Brian Downey during his teens, leading him to memberships with the Irish bands Skid Row and Thin Lizzy, and British Band Colosseum II. Moore shared the stage with such blues and rock musicians as B.B. King, Albert King, Jack Bruce, Albert Collins, George Harrison, and Greg Lake, as well as having a successful solo career. He guested on a number of albums recorded by high-profile musicians." 
      } 
     } 
    } 
} 

Мой код, чтобы получить «извлечь» информацию:

try { 
    JSONObject object = new JSONObject(result); // result is the String with the whole Json      
    String desc = object.getString("extract"); //this is going to be null 

} catch (JSONException e) { 
    Log.e("JSONException", "Error: " + e.toString()); 
} 

Im новичку форматами JSON, пожалуйста, помогите! Являются ли эти двойные объекты JSON?

ответ

4

Попробуйте это:

JSONObject object = new JSONObject(result); 
    JSONObject obj1 = object.getJSONObject("query"); 
    JSONObject obj2 = obj1.getJSONObject("pages"); 
    JSONObject obj3=null; 
    Iterator<String> keys= obj2.keys(); 
    while (keys.hasNext()) 
    { 
     String keyValue = (String)keys.next(); 
     obj3 = obj2.getJSONObject(keyValue); 
    } 

    String desc = obj3.getString("extract"); 
+0

Спасибо, но Input obj3 меняется другими поисками. Как я могу это сделать? fx 280636 to 203442 –

+1

'obj3 = obj2.getJSONObject (obj2.getNames() [0])' –

+0

Но теперь стоит «Метод getNames() не определен для типа JSONObject». Что не так ? Я уже импортировал «import org.json. *;» Но это не помогло –

1

object.getString("extract") возвращает нуль, так как метод GetString не сканирует весь JSON для этого поля (что, если поле «извлечь» было в нескольких местах?). Он смотрит только на верхний уровень.

Например, object.getString("batchcomplete") действителен и возвратил бы "" вместо null.

Вам нужно сделать что-то вроде этого:

String extract = object 
    .getJSONObject("query") 
    .getJSONObject("pages") 
    .getJSONObject("280636") 
    .getString("extract"); 
0

Вашего JSON-струнный вложено.

{ 
    "batchcomplete":"", 
    "query":{ 
     "pages":{ 
      "280636":{ 
       "pageid":280636, 
       "ns":0, 
       "title":"Gary Moore", 
       "extract":"Some long text" 
      } 
     } 
    } 
} 

So object.getString("extract") ищет прямых детей этого объекта. Этими детьми являются batchcomplete и query. Вы должны искать каждый уровень.

String desc = object.getJSONObject("query") 
    .getJSONObject("pages") 
    .getJSONObject("280636") 
    .getString("extract"); 
1

Используйте метод getJSONObject() для разбора в экстракта элемента следующим образом:

String desc = object.getJSONObject("query"). 
getJSONObject("pages"). 
getJSONObject("280636"). 
getString("extract") 

Выход:

Роберт Уильям Гэри Мур (4 апреля 1952 - 6 февраля 2011) был Северный ирландский музыкант, наиболее широко известный как певец и виртуозный гитарист. \ NВ карьере, относящейся к 1960-м годам, Мур играл с музыкантами, в том числе с Филом Линоттом и Брайаном Дауни во время его подростков, что привело его к членству с ирландскими группами Skid Row и Thin Lizzy и British Band Colosseum II , Мур разделил сцену с такими блюзами и рок-музыкантами, как Б.Б. Кинг, Альберт Кинг, Джек Брюс, Альберт Коллинз, Джордж Харрисон и Грег Лейк, а также с успешной сольной карьерой. Он принимал участие в ряде альбомов , записанных громкими музыкантами

Смежные вопросы