2014-01-03 7 views
7

У меня есть JSON-файл, который я хочу проанализировать. файл в формате JSON («MyFile») имеет формат следующим образом:Извлечение значений из вложенного объекта JSON

{ 
    "LanguageLevels": { 
     "1": "Początkujący", 
     "2": "ŚrednioZaawansowany", 
     "3": "Zaawansowany", 
     "4": "Ekspert" 
    } 
} 

Я хочу, чтобы получить значение (ŚrednioZaawansowany) Ки 2 из языка уровней.

import java.io.FileNotFoundException; 
import java.io.FileReader; 
import java.io.IOException; 
import java.util.Iterator; 
import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 
import org.json.simple.parser.JSONParser; 
import org.json.simple.parser.ParseException; 

public class JsonSimpleExample { 
public static void main(String[] args) { 

JSONParser parser = new JSONParser(); 

try { 

    Object obj = parser.parse(new FileReader("myfile"); 
    JSONObject jsonObject = (JSONObject) obj; 
    JSONObject jsonChildObject = (JSONObject)jsonObject.get("LanguageLevels"); 

Что делать дальше? Как я могу перебирать его?

+1

Я предлагаю, чтобы прочитать о официальную документацию и взглянуть на их примеры, если они есть. – Njol

ответ

11

Возможно, вы не используете последнюю версию JSON-Java Library, но json-simple. json-simple не был обновлен в течение длительного времени, но JSON-Java была обновлена ​​2 месяца назад. JSON-Java можно найти на GitHub, смотрите здесь: https://github.com/douglascrockford/JSON-java

Когда вы используете это, вы можете обратиться к моему коду вниз ниже:

public static void main(String[] args) { 
    String JSON = "{\"LanguageLevels\":{\"1\":\"Pocz\\u0105tkuj\\u0105cy\",\"2\":\"\\u015arednioZaawansowany\",\"3\":\"Zaawansowany\",\"4\":\"Ekspert\"}}\n"; 

    JSONObject jsonObject = new JSONObject(JSON); 
    JSONObject getSth = jsonObject.getJSONObject("LanguageLevels"); 
    Object level = getSth.get("2"); 

    System.out.println(level); 
} 

И как это с открытым кодом, вы можете прочитать кода и его документа, он проведет вас через.

Надеюсь, что это поможет.

+0

В конструкторе jsonObject Eclipse печатает эту ошибку: Конструктор JSONObject (String) не определен –

+1

@ m.aibin Обратите внимание, что все файлы, загруженные с GitHub, не помещаются в правильный пакет. Вы должны создать новый пакет под названием 'org.json', затем перетащите все файлы java в этот пакет. И ты качаешься! –

+0

@ m.aibin Кроме того, plz отмечает, что это не вложенный массив JSON, а вложенный объект JSON. Вы лучше измените название этого вопроса, это может ввести в заблуждение. –

0
JSONArray jsonChildArray = (JSONArray) jsonChildArray.get("LanguageLevels"); 
    JSONObject secObject = (JSONObject) jsonChildArray.get(1); 

Я думаю, что это должно работать, но я не имею возможности проверить это на данный момент ..

+0

Обратите внимание, что 'LanguageLevels' не является массивом JSON! Потому что он начинается с скобки, а не с открытой скобки. Таким образом, ваш код здесь может оказаться неприемлемым. –

6

Вы можете видеть, что JSONObject простирается HashMap, так что вы можете просто использовать его в качестве HashMap :

JSONObject jsonChildObject = (JSONObject)jsonObject.get("LanguageLevels"); 
for (Map.Entry in jsonChildOBject.entrySet()) { 
    System.out.println("Key = " + entry.getKey() + ", Value = " + entry.getValue()); 
} 
0

Чтобы увидеть все ключи JSONObject использовать этот

String JSON = "{\"LanguageLevels\":{\"1\":\"Pocz\\u0105tkuj\\u0105cy\",\"2\":\"\\u015arednioZaawansowany\",\"3\":\"Zaawansowany\",\"4\":\"Ekspert\"}}\n"; 
    JSONObject obj = new JSONObject(JSON); 
    Iterator iterator = obj.keys(); 
    String key = null; 
    while (iterator.hasNext()) { 
     key = (String) iterator.next(); 
     System.out.pritnln(key); 
    } 
2

Вам придется перебирать шаг за шагом в вложен JSON.

, например, для JSON, полученных от Google API геокодирования

{ 
    "results" : [ 
     { 
     "address_components" : [ 
      { 
       "long_name" : "Bhopal", 
       "short_name" : "Bhopal", 
       "types" : [ "locality", "political" ] 
      }, 
      { 
       "long_name" : "Bhopal", 
       "short_name" : "Bhopal", 
       "types" : [ "administrative_area_level_2", "political" ] 
      }, 
      { 
       "long_name" : "Madhya Pradesh", 
       "short_name" : "MP", 
       "types" : [ "administrative_area_level_1", "political" ] 
      }, 
      { 
       "long_name" : "India", 
       "short_name" : "IN", 
       "types" : [ "country", "political" ] 
      } 
     ], 
     "formatted_address" : "Bhopal, Madhya Pradesh, India", 
     "geometry" : { 
      "bounds" : { 
       "northeast" : { 
        "lat" : 23.3326697, 
        "lng" : 77.5748062 
       }, 
       "southwest" : { 
        "lat" : 23.0661497, 
        "lng" : 77.2369767 
       } 
      }, 
      "location" : { 
       "lat" : 23.2599333, 
       "lng" : 77.412615 
      }, 
      "location_type" : "APPROXIMATE", 
      "viewport" : { 
       "northeast" : { 
        "lat" : 23.3326697, 
        "lng" : 77.5748062 
       }, 
       "southwest" : { 
        "lat" : 23.0661497, 
        "lng" : 77.2369767 
       } 
      } 
     }, 
     "place_id" : "ChIJvY_Wj49CfDkR-NRy1RZXFQI", 
     "types" : [ "locality", "political" ] 
     } 
    ], 
    "status" : "OK" 
} 

Я итерацию в ниже заданной моды на "место": { "ш": 23,2599333, "LNG": 77,412615

// Recieve JSON в объект JSON

 JSONObject json = new JSONObject(output.toString()); 
     JSONArray result = json.getJSONArray("results"); 
     JSONObject result1 = result.getJSONObject(0); 
     JSONObject geometry = result1.getJSONObject("geometry"); 
     JSONObject locat = geometry.getJSONObject("location"); 

     //"iterate onto level of location"; 

     double lat = locat.getDouble("lat"); 
     double lng = locat.getDouble("lng"); 
Смежные вопросы