2016-12-28 5 views
0

У меня есть следующая строка json. Иногда есть несколько элементов определения, а иногда есть только один. Я новичок в разборе JSON, и я каким-то образом примитивным образом сумел получить значение первого элемента определения. Тем не менее, я не могу получить все значения определений, поскольку нет ресурсов, которые я могу найти в Интернете. Должен ли я проверять, существует ли второе возникновение, или есть лучший способ сделать это?Как проверить, существует ли элемент во время разбора JSON?

JSON:

{ 
    "metadata": { 
    "provider": "Oxford University Press" 
    }, 
    "results": [ 
    { 
     "id": "edifice", 
     "language": "en", 
     "lexicalEntries": [ 
     { 
      "entries": [ 
      { 
       "etymologies": [ 
       "late Middle English: via Old French from Latin aedificium, from aedis dwelling + facere make" 
       ], 
       "grammaticalFeatures": [ 
       { 
        "text": "Singular", 
        "type": "Number" 
       } 
       ], 
       "senses": [ 
       { 
        "definitions": [ 
        "a large, imposing building." 
        ], 
        "id": "m_en_gb0256160.001", 
        "registers": [ 
        "formal" 
        ] 
       }, 
       { 
        "definitions": [ 
        "a complex system of beliefs:" 
        ], 
        "examples": [ 
        { 
         "text": "the concepts on which the edifice of capitalism was built" 
        } 
        ], 
        "id": "m_en_gb0256160.002", 
        "registers": [ 
        "formal" 
        ] 
       } 
       ] 
      } 
      ], 
      "language": "en", 
      "lexicalCategory": "Noun", 
      "pronunciations": [ 
      { 
       "audioFile": "http://audio.oxforddictionaries.com/en/mp3/edifice_gb_1.mp3", 
       "dialects": [ 
       "British English" 
       ], 
       "phoneticNotation": "IPA", 
       "phoneticSpelling": "ˈɛdɪfɪs" 
      } 
      ], 
      "text": "edifice" 
     } 
     ], 
     "type": "headword", 
     "word": "edifice" 
    } 
    ] 
} 

Java сниппет, чтобы получить значение определения:

String locations = data.getJSONArray("results").getJSONObject(0).getJSONArray("lexicalEntries").getJSONObject(0).getJSONArray("entries").getJSONObject(0).getJSONArray("senses").getJSONObject(0).get("definitions").toString(); 

ответ

1

Все выглядит хорошо, но вы должны остановиться на getJSONArray ("чувства").

Это должно быть

JSONArray senses= .....getJSONArray("senses"); 

, а затем вы должны петля через элементы этого массива. Что-то вроде этого.

ArrayList<String> definitions = new ArrayList<String>(); 
for(int i =0; i < senses.length(); i++){ 
    definitions.add(senses.getJSONObject(i).optString("definitions",""); 
} 

Но прежде чем сделать это, вы должны заметить, что ваши определения JSON не хорошо сформирована, она должна быть как

коснуться
"definitions":"blablabl blablab" 

Поскольку это не массив ;.

+0

Это сработало. И это API, который я нашел в Интернете. Благодарю. ура –