2012-05-14 1 views
1
import net.sf.json.*; 

public class JSONDemo { 

/** 
* @param args 
*/ 
public static void main(String[] args) { 
    JSONObject mainObj = new JSONObject(); 

    JSONObject jObj1 = new JSONObject(); 
    JSONObject jObj2 = new JSONObject(); 

    JSONArray jA1 = new JSONArray();   
    JSONArray jA2 = new JSONArray(); 

    JSONArray mainArray= new JSONArray(); 

    jObj1.accumulate("id", 17); 
    jObj1.accumulate("name", "Alex"); 
    jObj1.accumulate("children", jA1); 

    mainArray.add(jObj1); 

    jObj2.accumulate("id", 94); 
    jObj2.accumulate("name", "Steve"); 
    jObj2.accumulate("children", jA2); 

    //Adding the new object to jObj1 via jA1 

    jA1.add(jObj2); 

    mainObj.accumulate("ccgs", mainArray); 
    System.out.println(mainObj.toString());  
}  

} 

Выхода я получил этоJSON создание вложенных данных неудачи в Java

{"ccgs":[{"id":17,"name":"Alex","children":[]}]} 

Я хотел jObj2 в ключе дети jObj1.

ответ

2

По-видимому, порядок создания узлов влияет на сгенерированную строку. Если вы измените порядок создания объекта, начиная с детей, Json верен.

Смотрите этот код:

public static void main(String[] args) { 
     // first create the child node 
     JSONObject jObj2 = new JSONObject(); 
     jObj2.accumulate("id", 94); 
     jObj2.accumulate("name", "Steve"); 
     jObj2.accumulate("children", new JSONArray()); 

     // then create the parent's children array 
     JSONArray jA1 = new JSONArray(); 
     jA1.add(jObj2); 

     // then create the parent 
     JSONObject jObj1 = new JSONObject(); 
     jObj1.accumulate("id", 17); 
     jObj1.accumulate("name", "Alex"); 
     jObj1.accumulate("children", jA1); 

     // then create the main array 
     JSONArray mainArray = new JSONArray(); 
     mainArray.add(jObj1); 

     // then create the main object 
     JSONObject mainObj = new JSONObject(); 
     mainObj.accumulate("ccgs", mainArray); 

     System.out.println(mainObj);  
    } 

Выход:

{"ccgs":[{"id":17,"name":"Alex","children":[{"id":94,"name":"Steve","children":[]}]}]} 
+0

Благодарим вас за ответ. – nixsix6

0

Если вы хотите что-то подобное {"ccgs": [{"id": 17, "name": "Alex", "children": {"id": 94, "name": "Steve", " «дети»: []}}]}

Тогда вы можете сделать это.

JSONObject mainObj = new JSONObject(); 

    JSONObject jObj1 = new JSONObject(); 
    JSONObject jObj2 = new JSONObject(); 

    JSONArray jA1 = new JSONArray();   
    JSONArray jA2 = new JSONArray(); 

    JSONArray mainArray= new JSONArray(); 

    jObj2.accumulate("id", 94); 
    jObj2.accumulate("name", "Steve"); 
    jObj2.accumulate("children", jA2); 

    jObj1.accumulate("id", 17); 
    jObj1.accumulate("name", "Alex"); 
    jObj1.accumulate("children", jObj2); 

    mainArray.add(jObj1); 



    //Adding the new object to jObj1 via jA1 

    jA1.add(jObj2); 

    mainObj.accumulate("ccgs", mainArray); 
    System.out.println(mainObj.toString()); 
+1

Но что, если я хотел бы добавить еще один брат Стива жгутов ключ детей Алекса? – nixsix6

+0

Затем вам нужно будет добавить всех братьев и сестер в массив и добавить массив к узлу children. –

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

  • Нет связанных вопросов^_^