从嵌套的JSON对象中检索值

我有JSON文件,我想解析。 JSON文件(“myfile”)的格式如下:

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

我想从语言级别中检索Key 2的值(ŚrednioZaawansowany)。

 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"); 

接下来做什么? 我如何迭代它?

也许您没有使用最新版本的JSON for Java Library。

json-simple已经很久没有更新了,而JSON-Java在2个月前更新了。

JSON-Java可以在GitHub上找到,这里是它的repo的链接: 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); } 

而作为JSON-Java开源,您可以阅读代码及其文档,它们将指导您完成。

希望它有所帮助。

您可以看到JSONObject扩展了HashMap ,因此您只需将其用作HashMap:

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

您将不得不一步一步地迭代到嵌套的JSON中。

例如,从Google地理编码api收到的JSON

 { "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" } 

我将以下面的方式迭代到“location”:{“lat”:23.2599333,“lng”:77.412615

//在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"); 
 JSONArray jsonChildArray = (JSONArray) jsonChildArray.get("LanguageLevels"); JSONObject secObject = (JSONObject) jsonChildArray.get(1); 

我认为这应该有效,但我现在没有可能对它进行测试..

要查看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); }