2016-07-19 4 views
0

Я пытаюсь получить «определение» Строка из следующего фрагмента кода JSON:Как создать строку из объекта JSON?

{ 
     "headword": "Google", 
     "senses": [ 
     { 
      "definition": [ 
      "a very popular search enginecomputer program that allows you to search for information on the Internet. Google also provides other Internet services including e-mail, maps, social networking, and video sharing." 
      ] 
     } 
     ], 
     "datasets": [ 
     "ldoce5", 
     "dictionary" 
     ], 
     "id": "cqAFJKTgNJ", 
     "url": "/v2/dictionaries/entries/cqAFJKTgNJ", 
     "pronunciations": [ 
     { 
      "audio": [ 
      { 
       "lang": "British English", 
       "type": "pronunciation", 
       "url": "/v2/dictionaries/assets/ldoce/gb_pron/google1004.mp3" 
      }, 
      { 
       "lang": "American English", 
       "type": "pronunciation", 
       "url": "/v2/dictionaries/assets/ldoce/us_pron/google1004a.mp3" 
      } 
      ], 
      "ipa": "ˈɡuːɡəl" 
     } 
     ] 
    } 

Проблема заключается в том, что в текущем сниппета «определение» JSON, как представляется, JSONObject и всякий раз, когда я пытаюсь сделайте это String, я получаю сообщение об ошибке, что это не строка. Когда я просто оставить объект как есть, выходной сигнал включает в себя скобку и другие символы:

{"definition":["a very popular search enginecomputer program that allows you to search for information on the Internet. Google also provides other Internet services including e-mail, maps, social networking, and video sharing."]}

Есть ли способ, чтобы сделать хорошую и опрятную строку, которая будет содержать точное определение и больше ничего. Btw, используя библиотеку org.json.

Код:

public class MainActivity { 

private static String word; 


public static void wordInitializer() throws IOException { 
    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); 
    word = reader.readLine(); 
} 

public static void processing() throws Exception { 

    String path = "http://api.pearson.com/v2/dictionaries/ldoce5/entries?headword=" + word;   
    URL url = new URL(path); 

    Scanner scanner = new Scanner(url.openStream()); 
    String line = ""; 
    while (scanner.hasNext()) 
     line += scanner.nextLine(); 
    scanner.close(); 

    JSONObject obj = new JSONObject(line); 

    JSONObject results = obj.getJSONArray("results").getJSONObject(0); 
    JSONArray senses = results.getJSONArray("senses"); 
    String definition = senses.getJSONObject(0).toString(); 
    System.out.println(definition); 
} 

public static void main(String[] args) throws Exception { 
    wordInitializer(); 
    processing(); 
} 
+0

где ваш код – redFIVE

+0

Это массив JSON с одним элементом, строка JSON. См. Формат JSON [здесь] (http://json.org/). –

+0

определение - это элемент в json, содержащий массив .... –

ответ

0

Если мы посмотрим на массив senses, мы видим, что он содержит объект, который, в свою очередь, имеет один ключ definition, который также является массивом. Первый элемент этого массива является то, что вы хотите, чтобы получить, что вы могли бы сделать это следующим образом:

String definition = senses.getJSONObject(0).getJSONArray("definition").getString(0); 
+0

Спасибо большое! Ваше решение работает :) –

+0

@MaximMaliarov Тогда не могли бы вы принять андерсера? ;) –

1

Это массив JSON, а не строка. Квадратные скобки дают это. Вы должны проанализировать его как массив, а затем получить первый элемент, чтобы получить определение.

+0

Также стоит отметить, что большинство других частей данных в этом ответе также являются массивами. – RayfenWindspear

+0

Да, спасибо. Попробуем это решение, просто погрузитесь в JSON, так что не понимайте вещи. –

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