2013-08-26 5 views
0

Мне нужно создать объект JSON для Arraylist. Ниже приведен кодСоздайте массив объектов JSON

public boolean submitOrder(ArrayList<OrderDetailsData> orderList) { 

     serUri = "lists.json"; 
     method = "post"; 


     JSONObject jsonObject = new JSONObject(); 

     JSONObject json = new JSONObject(); 

     JSONArray array = new JSONArray(); 
     try { 
      for (int i = 0; i < orderList.size(); i++) { 
       json.put("orderno", orderList.get(i).getOrderNumber() 
         .toString()); 
       json.put("tableno", orderList.get(i).getTableNumber() 
         .toString()); 
       json.put("itemname", orderList.get(i).getItemName().toString()); 
       json.put("amount", orderList.get(i).getAmount().toString()); 

       json.put("ordstatus", orderList.get(i).getOrderStatus() 
         .toString()); 
       array.put(json); 



      } 

     catch (JSONException je) { 
      return false; 
     } 

     try { 

      jsonObject.put("list", array); 
     } catch (JSONException je) { 
      return false; 
     } 

     WebServiceAsyncTask webServiceTask = new WebServiceAsyncTask(); 
     webServiceTask.execute(serUri, method,jsonObject, this); 
     return true; 
    } 

Проблема заключается в его создании объекта с деталями последнего элемента строки в каждой позиции. Скажем, если у моего OrderList есть 3 строки, созданный jsonObject имеет 3 строки, но с 3-мя строчными данными во всех 3. Кажется, что его основные данные для всех строк с последними выведенными рядами. Я пробовал пару других способов, но все же не получал желаемого результата. Пожалуйста, порекомендуйте. Благодарю.

JSON объект создан:

{"list":[{"amount":"10.50","orderno":"0220130826163623","quantity":"1","itemname":"Pollo Al Horno","tableno":"02","ordstatus":"placed"},{"amount":"10.50","orderno":"0220130826163623","itemname":"Pollo Al Horno","tableno":"02","ordstatus":"placed"},{"amount":"10.50","orderno":"0220130826163623","itemname":"Pollo Al Horno","tableno":"02","ordstatus":"placed"},{"amount":"10.50","orderno":"0220130826163623","itemname":"Pollo Al Horno","tableno":"02","ordstatus":"placed"},{"amount":"10.50","orderno":"0220130826163623","itemname":"Pollo Al Horno","tableno":"02","ordstatus":"placed"},{"amount":"10.50","orderno":"0220130826163623","itemname":"Pollo Al Horno","tableno":"02","ordstatus":"placed"},{"amount":"10.50","orderno":"0220130826163623","itemname":"Pollo Al Horno","tableno":"02","ordstatus":"placed"},{"amount":"10.50","orderno":"0220130826163623","itemname":"Pollo Al Horno","tableno":"02","ordstatus":"placed"}]} 

выше объект имеет только последний элемент в каждой строке.

+1

mh ... missing a {after array.put (json); –

+0

Спасибо, что указали это, но его уже там в коде. Ошибка при вставке здесь. – Gaurav

ответ

1

Небольшая ошибка

try { 
      for (int i = 0; i < orderList.size(); i++) { 

       JSONObject json = new JSONObject(); // update here 

       json.put("orderno", orderList.get(i).getOrderNumber() 
         .toString()); 
       json.put("tableno", orderList.get(i).getTableNumber() 
         .toString()); 
       json.put("itemname", orderList.get(i).getItemName().toString()); 
       json.put("amount", orderList.get(i).getAmount().toString()); 

       json.put("ordstatus", orderList.get(i).getOrderStatus() 
         .toString()); 
       array.put(json); 



      } 

     catch (JSONException je) { 
      return false; 
     } 
+0

Большое спасибо. Теперь работает. – Gaurav

1

Ваш JSONObject json = new JSONObject(); должен быть в пределах цикла.

Кроме того, вы не должны получать get (i) каждый раз для доступа к свойствам (для производительности). Вы можете использовать другую конструкцию для цикла:

for (OrderDetailsData data : orderList) { 
    JSONObject json = new JSONObject(); 
    json.put("orderno", data.getOrderNumber().toString()); 
    // ... 
} 

Наконец, может быть, вы должны рассмотреть вопрос о функции, которая считывает/записывает объект JSON из OrderDetailsData, так что вы можете повторно использовать код в других веб-сервисах.

+0

Спасибо. Его работа с предлагаемыми изменениями. – Gaurav

0

Вам нужно создать экземпляр объекта json внутри цикла for.

0

Посмотрите на это Я пытаюсь использовать GSON lib, попробуйте это, я не тестировался. Это должно работать нормально.

От Json строки в объект Json этот путь:

String jsonStr = "{\"a\": \"A\"}"; 

Gson gson = new Gson(); 
JsonElement element = gson.fromJson (jsonStr, JsonElement.class); 
JsonObject jsonObj = element.getAsJsonObject(); 

Для вашего кода это должно работать нормально:

public boolean submitOrder(ArrayList<OrderDetailsData> orderList) 
{ 
    serUri = "lists.json"; 
    method = "post"; 

    Gson gson = new Gson(); 
    String jsonstr = new Gson().toJson(orderList); 
    JsonElement element = gson.fromJson (jsonStr, JsonElement.class); 
    JsonObject jsonObject = element.getAsJsonObject(); 

    WebServiceAsyncTask webServiceTask = new WebServiceAsyncTask(); 
    webServiceTask.execute(serUri, method,jsonObject, this); 
    return true; 
} 
1

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

public boolean submitOrder(ArrayList<OrderDetailsData> orderList) { 
    Gson gson = new Gson(); 
    JsonObject myObj = new JsonObject(); 

    JsonElement ordersObj = gson.toJsonTree(orderList); 
    myObj.add("list", ordersObj); 
} 
Смежные вопросы