2016-01-18 2 views
0

Мне нужно добавить элемент в JSONArray, но метод «append» создает многократные массивы , а вместо этого добавляет один элемент.JAVA JSONObject, добавляющий новый элемент в массивы (JSONArray)

Что было бы самым простым способом?

Я создал следующий пример кода с JUnit только для изоляции моей проблемы.

import org.codehaus.jettison.json.JSONArray; 
import org.codehaus.jettison.json.JSONException; 
import org.codehaus.jettison.json.JSONObject; 
import org.junit.Before; 
import org.junit.Test; 

public class JettisonJSONOperations { 

    JSONObject jsonObject = new JSONObject(); 

    @Before 
    public void preCreateJsonObject(){ 

     try { 

      jsonObject.put("groupName","administrators"); 

      JSONArray members = new JSONArray(); 
      members.put("edward"); 
      members.put("richard"); 
      members.put("john"); 

      jsonObject.put("members", members); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     System.out.println(jsonObject.toString()); 
    } 

    @Test 
    public void addingElementToJSONArray(){ 

     try { 

      jsonObject.append("members", "batman"); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     System.out.println(jsonObject.toString()); 
    } 
} 

Выход:

{"groupName":"administrators","members":["edward","richard","john"]} 
{"groupName":"administrators","members":[["edward","richard","john"],"batman"]} 

Process finished with exit code 0 
+2

вместо 'jsonObject. append ("members", "batman"); 'должен быть' jsonObject. getJSONArray ("members"). put ("batman"); 'Вы добавляли к JSONObject;) – Erwin

+1

Ah ok .. Мне нужен еще один шаг .. это работает, спасибо @pyerwin! однако в моем конкретном случае я нашел некоторые проблемы с Jettison, как JsonProvider, используя Camel и CXF, поэтому я решил изменить его на Jackson и JSONObject от org.json. –

ответ

0

После прочтения много комментариев по поводу вопросов отстрелить, я решил изменить библиотеку отстрелить JSONObject в org.json.

От:

<dependency> 
     <groupId>org.codehaus.jettison</groupId> 
     <artifactId>jettison</artifactId> 
     <version>1.3.4</version> 
    </dependency> 

To:

<dependency> 
     <groupId>org.json</groupId> 
     <artifactId>json</artifactId> 
     <version>20131018</version> 
    </dependency> 

И хорошая новость это работает отлично :)

import org.json.JSONArray; 
import org.json.JSONException; 
import org.json.JSONObject; 
import org.junit.Before; 
import org.junit.Test; 

public class ORGJSONOperations { 

    JSONObject jsonObject = new JSONObject(); 

    @Before 
    public void preCreateJsonObject(){ 

     try { 

      jsonObject.put("groupName","administrators"); 

      JSONArray members = new JSONArray(); 
      members.put("edward"); 
      members.put("richard"); 
      members.put("john"); 

      jsonObject.put("members", members); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     System.out.println(jsonObject.toString()); 
    } 

    @Test 
    public void addingElementToJSONArray(){ 

     try { 

      jsonObject.append("members", "batman"); 

     } catch (JSONException e) { 
      e.printStackTrace(); 
     } 

     System.out.println(jsonObject.toString()); 
    } 
} 

Выход:

{"groupName":"administrators","members":["edward","richard","john"]} 
{"groupName":"administrators","members":["edward","richard","john","batman"]} 

Process finished with exit code 0 
Смежные вопросы