2017-05-05 88 views
2

JSON非常新。使用json-lib做这件事,并且一直拉着我的头发,试图从牛津字典API的这个JSON响应中获得“定义”。尝试了各种各样的事情。但从来没有比“结果”中的所有东西都更具体。想弄清楚为什么这是如此困难,否则就会诉诸正则表达式。从字典api解析JSON与Java

 JSONObject obj = new JSONObject(stringBuilder.toString()); 

     JSONArray arr = obj.getJSONArray("results"); 
     String test = arr.getJSONObject(1).toString(); // Empty wtf? 
     String definition = obj.getString("definitions"); // empty also... 

管理也进入“ID”,“语言”和“lexicalEntries”分开,但任何超出似乎并不想合作....这是一个正常的JSON响应?这很尴尬不?谢谢...

JSON:

{ 
    "metadata": { 
    "provider": "Oxford University Press" 
    }, 
    "results": [ 
    { 
     "id": "ace", 
     "language": "en", 
     "lexicalEntries": [ 
     { 
      "entries": [ 
      { 
       "homographNumber": "000", 
       "senses": [ 
       { 
        "definitions": [ 
        "a playing card with a single spot on it, ranked as the highest card in its suit in most card games" 
        ], 
        "id": "m_en_gbus0005680.006" 
       }, 
       { 
        "definitions": [ 
        "a person who excels at a particular sport or other activity" 
        ], 
        "id": "m_en_gbus0005680.010", 
        "subsenses": [ 
        { 
         "definitions": [ 
         "a pilot who has shot down many enemy aircraft" 
         ], 
         "id": "m_en_gbus0005680.011" 
        } 
        ] 
       }, 
       { 
        "definitions": [ 
        "(in tennis and similar games) a service that an opponent is unable to return and thus wins a point" 
        ], 
        "id": "m_en_gbus0005680.013", 
        "subsenses": [ 
        { 
         "definitions": [ 
         "a hole in one" 
         ], 
         "id": "m_en_gbus0005680.014" 
        } 
        ] 
       } 
       ] 
      } 
      ], 
      "language": "en", 
      "lexicalCategory": "Noun", 
      "text": "ace" 
     }, 
     { 
      "entries": [ 
      { 
       "homographNumber": "001", 
       "senses": [ 
       { 
        "definitions": [ 
        "very good" 
        ], 
        "id": "m_en_gbus0005680.016" 
       } 
       ] 
      } 
      ], 
      "language": "en", 
      "lexicalCategory": "Adjective", 
      "text": "ace" 
     }, 
     { 
      "entries": [ 
      { 
       "homographNumber": "002", 
       "senses": [ 
       { 
        "definitions": [ 
        "(in tennis and similar games) serve an ace against (an opponent)" 
        ], 
        "id": "m_en_gbus0005680.020", 
        "subsenses": [ 
        { 
         "definitions": [ 
         "score an ace on (a hole) or with (a shot)" 
         ], 
         "id": "m_en_gbus0005680.026" 
        } 
        ] 
       }, 
       { 
        "definitions": [ 
        "achieve high marks in (a test or exam)" 
        ], 
        "id": "m_en_gbus0005680.028", 
        "subsenses": [ 
        { 
         "definitions": [ 
         "outdo someone in a competitive situation" 
         ], 
         "id": "m_en_gbus0005680.029" 
        } 
        ] 
       } 
       ] 
      } 
      ], 
      "language": "en", 
      "lexicalCategory": "Verb", 
      "text": "ace" 
     } 
     ], 
     "type": "headword", 
     "word": "ace" 
    } 
    ] 
} 
+1

假设'字符串测试= arr.getJSONObject(0).toString();'有值inside.it最好使用像http://jsonviewer.stack.hu/工具来扩展json和分析。 –

+0

感谢您的链接,这是一个很好的资源。 –

回答

2
String jsonData = sb.toString(); 
JSONObject obj = new JSONObject(jsonData); 

JSONArray resultsArr = obj.getJSONArray("results"); 
String test = resultsArr.getJSONObject(0).toString(); 

JSONArray lexicalEntriesArr = resultsArr.getJSONObject(0).getJSONArray("lexicalEntries"); 
JSONArray entriesArr = lexicalEntriesArr.getJSONObject(0).getJSONArray("entries"); 
JSONArray sensesArr = entriesArr.getJSONObject(0).getJSONArray("senses"); 
JSONArray definitionsArr = sensesArr.getJSONObject(0).getJSONArray("definitions"); 

String definition = definitionsArr.toString(); 

参考:http://jsonviewer.stack.hu/我们遍历JSON对象和
观察仔细的方式时,我们应该使用getJSONObject & getJSONArray方法来检索特定我们希望从JSON对象中获取数据的类型。

enter image description here

更新:您可能希望JSON数组遍历按您的要求。我刚刚解释过如何达到definitions

+0

太棒了。谢谢你,先生。你是一个传奇。 –

+1

请检查更新的代码。理解起来要简单得多。 –

+1

我不是一个传奇:p有很多高度评价的用户,因此我只是在飞行中学习,在尝试解决它之前尝试自己的东西。 –