2015-03-16 4 views
0

У меня есть строка JSON, и я получил данные элемента data в JSONObject. После того, как я прочитал это, итоговая строка выглядит следующим образом. Я использую библиотеку org.json.Как читать JSON в Java?

String dataStr = "[{\"name\":\"jhonny\",\"counts\":[\"50\",\"44\",\"46\"],\"url\":\"google\"}, 
{\"name\":\"john\",\"counts\":[\"344\",\"4\",\"18\"],\"url\":\"yahoo\"}]"; 

Я пытался читать каждый элемент, как следующий,

String dataStr = report.get("data").toString(); 
JSONObject data = new JSONObject(dataStr.substring(1)); 
System.out.println(data); 

Но мой вывод,

{"name":"jhonny","counts":["50","44","46"],"url":"google"} 

Выход содержит только один элемент. Как я могу это исправить?

+0

Что такое JSONObject? Из какой библиотеки? (Вопрос: «Как читать JSON с * именем библиотеки *», а не «Как читать JSON в Java») – immibis

+0

(Кроме того, знаете ли вы, что вся строка является массивом JSON?) – immibis

+1

Немного больше подробностей было бы полезно. например Каково значение 'dataStr'? – AKS

ответ

2
JSONArray jsonarray = new JSONArray(datastr); 
for(int i=0; i<jsonarray.length(); i++){ 
    JSONObject data= jsonarray.getJSONObject(i); 

    System.out.println(data); 
} 
2

Использование org.json библиотеки:

JSONObject obj = new JSONObject("{interests : [{interestKey:Dogs}, {interestKey:Cats}]}"); 

List<String> list = new ArrayList<String>(); 
JSONArray array = obj.getJSONArray("interests"); 
for(int i = 0 ; i < array.length() ; i++){ 
    list.add(array.getJSONObject(i).getString("interestKey")); 
} 
1

Проблема в том, вы пытаетесь читать JSONArray, как JSONObject.

Для разбора JSONArray вам нужно сделать что-то вроде: (не уверен, какие библиотеки вы используете)

for (int i = 0; i < jsonarray.length(); i++) { 
    JSONObject jsonobject = jsonarray.getJSONObject(i); 
    // jsonobject holds the desired element. 
} 
0

Если проанализировать вашу строку JSON, вы заметите, что ваша строка JSON содержит несколько JSON объект без внешнего объекта, например: -

{ 
"outer":{ 
      {\"name\":\"jhonny\",\"counts\":[\"50\",\"44\",\"46\"],\"url\":\"google\"}, 
      {\"name\":\"jhonny\",\"counts\":[\"50\",\"44\",\"46\"],\"url\":\"google\"} 
     } 
} 

То, как вы разбираете, требует такой структуры json. Ваша строка json на самом деле просто jsonarray. Так что, как таким образом:

JSONArray jsonarray = new JSONArray(datastr); 
for(int i=0; i<jsonarray.length(); i++){ 
    JSONObject data= jsonarray.getJSONObject(i); 
} 

Для больше вы можете посетить эту ссылку, которая дает вам хорошее объяснение how to read json in java