Доступ к элементам элементов в JSONArray с помощью Java

Я только начинаю использовать json с java. Я не уверен, как получить доступ к строковым значениям в JSONArray. Например, мой json выглядит так:

{ "locations": { "record": [ { "id": 8817, "loc": "NEW YORK CITY" }, { "id": 2873, "loc": "UNITED STATES" }, { "id": 1501 "loc": "NEW YORK STATE" } ] } } 

мой код:

 JSONObject req = new JSONObject(join(loadStrings(data.json),"")); JSONObject locs = req.getJSONObject("locations"); JSONArray recs = locs.getJSONArray("record"); 

На данный момент у меня есть доступ к «записи» JSONArray, но я не уверен, как получить значения «id» и «loc» в цикле for. Извините, если это описание не слишком ясное, я немного новичок в программировании.

Вы пытались использовать [ JSONArray.getJSONObject(int) ] ( http://json.org/javadoc/org/json/JSONArray.html#getJSONObject(int)) и [ JSONArray.length() ] ( http: // json.org/javadoc/org/json/JSONArray.html#length ()) для создания цикла for:

 for (int i = 0; i < recs.length(); ++i) { JSONObject rec = recs.getJSONObject(i); int id = rec.getInt("id"); String loc = rec.getString("loc"); // ... } 

Org.json.JSONArray не является итерируемым.
Вот как я обрабатываю элементы в файле net.sf.json.JSONArray :

  JSONArray lineItems = jsonObject.getJSONArray("lineItems"); for (Object o : lineItems) { JSONObject jsonLineItem = (JSONObject) o; String key = jsonLineItem.getString("key"); String value = jsonLineItem.getString("value"); ... } 

Прекрасно работает… 🙂

Java 8 находится на рынке после почти двух десятилетий, следующим способом является org.json.JSONArray с java8 Stream API.

 import org.json.JSONArray; import org.json.JSONObject; @Test public void access_org_JsonArray() { //Given: array JSONArray jsonArray = new JSONArray(Arrays.asList(new JSONObject( new HashMap() {{ put("a", 100); put("b", 200); }} ), new JSONObject( new HashMap() {{ put("a", 300); put("b", 400); }} ))); //Then: convert to List List jsonItems = IntStream.range(0, jsonArray.length()) .mapToObj(index -> (JSONObject) jsonArray.get(index)) .collect(Collectors.toList()); // you can access the array elements now jsonItems.forEach(arrayElement -> System.out.println(arrayElement.get("a"))); // prints 100, 300 } 

Если итерация выполняется только один раз (нет необходимости .collect )

  IntStream.range(0, jsonArray.length()) .mapToObj(index -> (JSONObject) jsonArray.get(index)) .forEach(item -> { System.out.println(item); }); 

Посмотрев на свой код, я чувствую, что вы используете JSONLIB. Если это так, посмотрите следующий fragment, чтобы преобразовать массив json в массив java.

  JSONArray jsonArray = (JSONArray) JSONSerializer.toJSON( input ); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setArrayMode( JsonConfig.MODE_OBJECT_ARRAY ); jsonConfig.setRootClass( Integer.TYPE ); int[] output = (int[]) JSONSerializer.toJava( jsonArray, jsonConfig ); 

Если это помогает кому-то другому, я смог преобразовать его в массив, выполнив что-то вроде этого,

 JSONObject jsonObject = (JSONObject)new JSONParser().parse(jsonString); ((JSONArray) jsonObject).toArray() 

… или вы должны иметь возможность получить длину

 ((JSONArray) myJsonArray).toArray().length 

HashMap regs = (HashMap) parser.parse (stringjson);

(String) (( HashMap ) regs.get (“firstlevelkey”)). Get (“secondlevelkey”);

  • Удалите повторяющиеся значения из массива JS
  • Не удалось resize массива в переменной Inspector в Unity?
  • JavaScript - почему Array.prototype.fill фактически заполняет «указатель» объекта при заполнении чего-либо типа «новый объект ()»
  • Преобразование Mat в массив / вектор в OpenCV
  • Android-создать JSON-массив и объект JSON
  • Как вернуть массив из JNI в Java?
  • Как определить, инициализирован ли массив в VB6?
  • Строгое выражение инициализации массива?
  • Алгоритм перестановки для массива целых чисел в Java
  • Получить JSONArray без имени массива?
  • Bash: чтение строки в разделительной таблице в массив
  • Давайте будем гением компьютера.