2015-09-29 4 views
0

У меня есть ArrayList, который должен быть преобразован в JSON массива размещать на сервереПреобразование объекта списка массива jsonarray

формат JSON должен быть такой:

{ 
    p:1, 
    s:["a":1,"b":2],["a":2,"b":3],["a":3,"b":4] 
} 

Пусть говорят, у меня есть:

List<MyObject> objectList = new ArrayList<MyObject>(); 
MyObject myObject = new MyObject(); 
myObject .setA(1); 
myObject .setB(2); 

myObject .setA(2); 
myObject .setB(3); 

myObject .setA(3); 
myObject .setB(4); 

objectList.add(myObject); 

Мой текущий код:

for (int i = 0; i < objectList.size(); i++) { 
     JSONArray ar = new JSONArray(); 
     ar.put("a:"+objectList.get(i).getA()); 
     ar.put("b:"+objectList.get(i).getB()); 

     jOuter.put("s",ar); 
    } 

, но это не работает, текущее возвращение:

{"p":1,"s":["a:20","b:10.0"]} 

Спасибо.

+0

Это JSon вам показать далеко в силе. Ключи должны быть строками, значениями могут быть списки '[]', но списки не могут содержать пары значений ключа, те идут в объектах '{}' –

+0

@Cris. Вы можете посмотреть в библиотеку Gson. –

+0

вы помещаете в свой 'JSONArray' a 'String', в то время как вы должны положить' JSONObject' – user902383

ответ

2

Разве это не должно быть что-то вроде этого?

JSONArray ar = new JSONArray(); 
for (int i = 0; i < objectList.size(); i++) { 

     JSONObject objects = new JSONObject(); 
     objects.put("a", objectlist.get(i).getA(); 
     objects.put("b", objectlist.get(i).getB(); 

     ar.put(objects); 

    } 
     jOuter.put("s",ar); 
+0

отредактировал: удалить _id из getA_id() – Cris

+0

return is {"p": 1, "s": [{"a": 1, "b": 2}, {}]} – Cris

+0

Кто-то уже сделал это: массив JSON должен быть вне цикла for – Prexx

1

Ваш требуемый формат недействителен. Я думаю, что вы ищете что-то вроде этого

{ 
    "p": 1, 
    "s": [ 
    { 
     "a": 1, 
     "b": 2 
    }, 
    { 
     "a": 2, 
     "b": 3 
    }, 
    { 
     "a": 3, 
     "b": 4 
    } 
    ] 
} 

Для этого кода будет вроде как ниже

JSONArray jArray = new JSONArray(); 
for (int i = 0; i < objectList.size(); i++) { 
     JSONObject job= new JSONObject(); 
     job.put("a",objectList.get(i).getA()); 
     job.put("b",objectList.get(i).getB()); 

     jArray .put(job); 
} 

try { 
     jOuter.put("s", jArray); 
} catch (JSONException e) { 
     e.printStackTrace(); 
} 
1

Пожалуйста, проверьте следующий код: Это сделает правильное форматирование:

JSONObject jo = new JSONObject(); 
    try { 
     jo.put("p", "1"); 

     JSONArray jarr = new JSONArray(); 
     for (MyObject listItem : objectList) { 
      JSONObject inner = new JSONObject(); 
      inner.put("a", listItem.getA()); 
      inner.put("b", listItem.getB()); 

      jarr.put(inner); 
     } 
     jo.put("s", jarr); 
    } catch (JSONException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 

Он будет возвращать выход как:

{ 
    "p":1, 
    "s":[{"a":1,"b":2},{"a":2,"b":3},{"a":3,"b":4}] 
} 

Это делает правильный json, который, я думаю, вам нужен! Дай мне знать, если я где-то ошибаюсь.

1

Ваша запись s на самом деле является JsonArray, а ваш p - это просто собственность. Здесь я использую Gson, но вы можете легко применить его к любой библиотеке, которую вы используете. Таким образом, вы можете сделать следующее:

JsonObject jObj = new JsonObject(); 
jObj.addProperty("p", 1); 

JsonArray sArr = new JsonArray(); 

for (int i = 0; i < objectList.size(); i++) 
{ 
     JsonObject innerObj = new JsonObject(); 
     innerObj.addProperty("a:"+objectList.get(i).getA()); 
     innerObj.addProperty("b:"+objectList.get(i).getB()); 

     sArr.add(innerObj); 
} 

jObj.addProperty("s", sArr); 

Выход:

{ 
    "p":1, 
    "s":[{"a":1,"b":2},{"a":3,"b":4}] 
} 
Смежные вопросы