2013-08-13 6 views
7

Как правильно преобразовать эту строку в jsonArray?Преобразование строки в JsonArray

{ 
    "myArray": [ 
    { "id": 1, 
     "att1": 14.2, 
     "att2": false }, 
    { "id": 2, 
     "att1": 13.2, 
     "att2": false }, 
    { "id": 3, 
     "att1": 13, 
     "att2": false } 
    ]} 

An JSONArray jArray = new JSONArray(STRING_FROM_ABOVE); приводит jArray.length = 1 Its мой первый раз, чтобы войти в контакт с JSON :)

+0

Строка - это объект JSON, а не массив (обратите внимание на внешние фигурные скобки). – Henry

ответ

10

Попробуйте это:

JSONObject jObject = new JSONObject(STRING_FROM_ABOVE); 
JSONArray jArray = jObject.getJSONArray("myArray"); 

"string_from_above" не является массив Json, это объект JSON, содержащий один атрибут (MyArray), который является массив Json;)

Вы можете сделать :

for (int i = 0; i < jArray.length(); i++) { 
     JSONObject jObj = jArray.getJSONObject(i); 
     System.out.println(i + " id : " + jObj.getInt("id")); 
     System.out.println(i + " att1 : " + jObj.getDouble("att1")); 
     System.out.println(i + " att2 : " + jObj.getBoolean("att2")); 
} 
+1

Большое спасибо ... Мне действительно нужно подойти ближе к json и их синтаксису :) – DieselPower

+0

Нет проблем, не забудьте принять ответ хотя :) – Organ

+0

Итак, вы не можете сказать jArray [i]; да? – marciokoko

0

Посмотрите на JQuery, и, в частности, функция Анализировать. Это приведет к непосредственному анализу массива Json в объект.

+0

Джейсон, действительно !! – blackpanther

+0

Autocorrect! В любом случае, это фонетически правильно. – PizzaTheHut

2

При синтаксическом анализе добавьте значения к объектам и ArrayLists или, тем не менее, как вы хотите их использовать. Удачи.

JSONObject jo = new JSONObject(STRING_FROM_ABOVE); 
JSONArray rootArray= jo.getJSONArray("myArray"); 
int rootArrayLength=rootArray.length(); 
for(int i=0;i<rootArrayLength;i++){ 
    int id= rootArray.getJSONObject(i).getInt("id"); 
    // do same for others too and create an object 
} 
// create object and make a list 
1

Просто бросить еще один метод в смесь здесь, я хотел бы рекомендовать взглянуть на Gson. Gson - это библиотека, которая упрощает сериализацию и десериализацию из объектов Java. Например, с вашей строкой вы можете сделать это:

// Declare these somewhere that is on the classpath 
public class ArrayItem{ 
    public int id; 
    public double att1; 
    public boolean att2; 
} 

public class Container{ 
    public List<ArrayItem> myArray; 
} 

// In your code 
Gson gson = new Gson(); 

Container container = gson.fromJson(json, Container.class); 

for(ArrayItem item : container.myArray){ 
    System.out.println(item.id); // 1, 2, 3 
    System.out.println(item.att1); // 14.2, 13.2, 13.0 
    System.out.println(item.att2); // false, false, false 
} 

Аналогичным образом, вы также можете легко вернуться назад.

String jsonString = gson.toJson(container); 
// jsonString no contains something like this: 
// {"myArray":[{"id":1,"att1":14.2,"att2":false},{"id":2,"att1":13.2,"att2":false},{"id":3,"att1":13.0,"att2":false}]} 

Основное преимущество, что с помощью что-то вроде Gson обеспечивает то, что теперь вы можете использовать все проверки типов в Java по умолчанию, вместо того, чтобы управлять именами атрибутов и типов самостоятельно. Это также позволяет вам делать некоторые причудливые вещи, такие как иерархии типов репликации, которые облегчают управление большим количеством сообщений json. Он отлично работает с Android, а сам банку крошечный и не требует никаких дополнительных зависимостей.

Смежные вопросы