2015-05-18 9 views
2

Я пытаюсь преобразовать JSONArray который выглядит следующим образом:Преобразование JSONArray в ArrayList

{"output":["name":"Name3","URI":"Value3"},{"name":"Name5","URI":"Value5"},{"name":"Name4","URI":"Value4"}]} 

в arrayLis т так, например, выход Arr[0][0] будет Name3

Я попытался это решение :

if (outputs!= null) { 
    int len = outputs.length(); 
    for (int j=0;j<len;j++){ 
     list.add(outputs.get(j).toString()); 
    } 
} 
for (String str : list) {    
    System.out.println("Item is: " + str);    
} 

Но я получаю полную строку: {"name":"Name3","URI":"Value3"}

Как я могу получить каждый объект моего JSONArray?

+0

итерации на внутреннем формате JSON. – Maroun

+0

@maxZoom Я видел это, и он не решает мою проблему, но спасибо в любом случае за указание на это. Я могу это сделать, но я хочу отправить полный массив в качестве аргумента – azelix

ответ

2

Aazelix, ваш выход Json, кажется, отсутствует, открывая матрицу. Ее правильная форма приведена ниже:

{"output":[{"name":"Name3","URI":"Value3"},{"name":"Name5","URI":"Value5"},{"name":"Name4","URI":"Value4"}]} 

Что касается преобразования в POJO

List<MyObj> list = new ArrayList<>(); 
if (outputs!= null) { 
    int len = outputs.length(); 
    for (int i=0; i<len; i++) { 
    JSONObject o = (JSONObject) outputs.get(i); 
    list.add(new MyObj(o.getString('name'), o.getString('URL'))); 
    } 
} 
System.out.println("There is " + list.size() + " objects."); 


public static final class MyObj { 
    final String name; 
    final String url; 

    public MyObj(String name, String url) { 
    this.name = name; 
    this.url = url; 
    } 
} 
+0

'o.name'; 'O.URL'. В самом деле? –

+0

второе poing: OP имел 'URI', а не' URL' –

+0

Я не компилировал и не запускал код, поэтому ему могут потребоваться некоторые улучшения. – MaxZoom

3

Это не указано, что JSON парсер вы используете, так что я полагаю, вы можете выбрать прямо сейчас, и я Предлагаю использовать Gson как таковой.

Лучшее решение для десериализации такой структуры создает специальный класс для каждой структуры, например:

public class NameURIPair { 
    private String name; 
    private String URI; 

    // getters 
} 

Тогда ваш JSON может быть десериализации в класс, который держит в нем в результате List:

public class Data { 
    private List<NameURIPair> output; 

    // getter 
} 

// ... 

Data data = new Gson(stringData, Data.class); 

Поскольку вы запросили другой путь, вы можете получить только разобранный JSON в JsonElement с JsonParser

JsonElement root = new JsonParser().parse(stringData); 

Хотя я не дам вам полное решения, чтобы не оценить такого рода решения :-)

+0

Гораздо лучше! Это должен быть правильный ответ – brunoramonalmeida

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