2015-06-25 7 views
2

Я использую библиотеку org.json.simple для построения JSONArray из JSONObject. Так что моя структура выглядитИтерационный массив объектов JSON

c= [ 
    { 
    "name":"test", 
    "age":1 
    }, 
    { 
    "name":"test", 
    "age":1 
    } 
] 

Чтобы перебирать массив в Java, я попытался

for (int i = 0; i < c.size(); i++) { 
    JSONObject obj = (JSONObject) c.get(i); 
    System.out.println(obj.get("name"));   
} 

Он напечатан null, но когда пытался напечатать obj.toString, он печатает строку JSON, как и ожидалось.

Я использую org.json.simple jar, поэтому не могу использовать методы, определенные org.json.JSONArray или org.json.JSONObject.

Любые идеи для получения значений от объекта с помощью ключа?

+0

Что такое 'i

+0

http://stackoverflow.com/questions/18977144/how-to-parse-json-array-not-json-object-in-android –

+0

'c = arr.size()', а затем 'c.get (i) '? Это не должно компилироваться. Поэтому, пожалуйста, напишите точный код, который демонстрирует проблему. –

ответ

2

Вы можете итерацию по JSONArray элементов с помощью Iterator, как это:

//arr is your JSONArray here 
    Iterator<Object> iterator = arr.iterator(); 
    while (iterator.hasNext()) { 
     Object obj = iterator.next(); 
     if(obj instanceof JSONObject) { 
      System.out.println(obj.get("name")); 
     } 
    } 

Он использует org.json.simple.JSONObject и org.json.simple.JSONArray.

1

используйте следующий фрагмент, чтобы проанализировать JsonArray.

for (int i = 0; i < jsonarray.length(); i++) { 
    JSONObject jsonobject = jsonarray.getJSONObject(i); 
    String name = jsonobject.getString("name"); 
    int age = jsonobject.getInt("age"); 
} 

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

Кредиты - https://stackoverflow.com/a/18977257/3036759

+1

Нет, это не сработает, как указано в вопросе, я использую 'org.simple.json' JSONArray. он не имеет метода 'length()' –

2

Ваш код абсолютно правильно, он прекрасно работает с org.json.simple:

import org.json.simple.JSONArray; 
import org.json.simple.JSONObject; 
import org.json.simple.parser.JSONParser; 
import org.json.simple.parser.ParseException; 

public class JsonTest { 
    public static void main(String[] args) throws ParseException { 
     JSONArray c = (JSONArray) new JSONParser() 
       .parse("[ { \"name\":\"test\", \"age\":1 }, " 
         + "{ \"name\":\"test\", \"age\":1 } ]"); 
     for (int i = 0; i < c.size(); i++) { 
      JSONObject obj = (JSONObject) c.get(i); 
      System.out.println(obj.get("name"));   
     } 
    } 
} 

Он выводит:

test 
test 

Проверить, как был создан вход JSONArray. Вполне возможно, что внутри есть что-то другое. Например, возможно, что у вас есть непечатаемый символ в имени ключа, поэтому вы не видите его при использовании c.toString(), но obj.get("name") терпит неудачу.