2014-02-26 71 views
16

我想要構建一個類似於使用JSONObject和JSONArray的java中的結構的JSON對象。使用JSONObject在Java中爲以下結構創建嵌套JSON對象?

我已經經歷了堆棧溢出的各種帖子,這表明使用像推,放等方法,我無法識別JSONArray。請幫忙。

{ 
    "name": "sample", 
    "def": [ 
     { 
      "setId": 1, 
      "setDef": [ 
       { 
        "name": "ABC", 
        "type": "STRING" 
       }, 
       { 
        "name": "XYZ", 
        "type": "STRING" 
       } 
      ] 
     }, 
     { 
      "setId": 2, 
      "setDef": [ 
       { 
        "name": "abc", 
        "type": "STRING" 
       }, 
       { 
        "name": "xyz", 
        "type": "STRING" 
       } 
      ] 
     } 
    ] 
} 

回答

43

隨着進口org.json.JSONArrayorg.json.JSONObject

JSONObject object = new JSONObject(); 
object.put("name", "sample"); 
JSONArray array = new JSONArray(); 

JSONObject arrayElementOne = new JSONObject(); 
arrayElementOne.put("setId", 1); 
JSONArray arrayElementOneArray = new JSONArray(); 

JSONObject arrayElementOneArrayElementOne = new JSONObject(); 
arrayElementOneArrayElementOne.put("name", "ABC"); 
arrayElementOneArrayElementOne.put("type", "STRING"); 

JSONObject arrayElementOneArrayElementTwo = new JSONObject(); 
arrayElementOneArrayElementTwo.put("name", "XYZ"); 
arrayElementOneArrayElementTwo.put("type", "STRING"); 

arrayElementOneArray.put(arrayElementOneArrayElementOne); 
arrayElementOneArray.put(arrayElementOneArrayElementTwo); 

arrayElementOne.put("setDef", arrayElementOneArray); 
array.put(arrayElementOne); 
object.put("def", array); 

我並沒有包括第一陣列的爲清楚起見,第二個元素。希望你明白了。

編輯:

以前的答案是假設你使用org.json.JSONObjectorg.json.JSONArray

net.sf.json.JSONObject對於和net.sf.json.JSONArray

JSONObject object = new JSONObject(); 
object.element("name", "sample"); 
JSONArray array = new JSONArray(); 

JSONObject arrayElementOne = new JSONObject(); 
arrayElementOne.element("setId", 1); 
JSONArray arrayElementOneArray = new JSONArray(); 

JSONObject arrayElementOneArrayElementOne = new JSONObject(); 
arrayElementOneArrayElementOne.element("name", "ABC"); 
arrayElementOneArrayElementOne.element("type", "STRING"); 

JSONObject arrayElementOneArrayElementTwo = new JSONObject(); 
arrayElementOneArrayElementTwo.element("name", "XYZ"); 
arrayElementOneArrayElementTwo.element("type", "STRING"); 

arrayElementOneArray.add(arrayElementOneArrayElementOne); 
arrayElementOneArray.add(arrayElementOneArrayElementTwo); 

arrayElementOne.element("setDef", arrayElementOneArray); 
object.element("def", array); 

基本上它是相同的,替換方法「放」在JSONObject的「元素」,和「放」在JSONArray「添加」。

+0

感謝您的時間,正如我所說的我的問題我無法訪問JSONArray的put方法。我使用net.sf.Json API來創建這個對象(JSONObject和JSONArray)。更正我如果我錯了 – user3131769

+0

我假設你使用的是org.json.JSONObject和org.json.JSONArray。抱歉,根據http://json-lib.sourceforge.net/apidocs/net/sf/json/JSONObject.html和http://json-lib.sourceforge.net/apidocs/net/ sf/json/JSONArray.html,我想你可以替換JSONObject的'element'方法的所有'put'方法,並替換JSONArray中的'add'的'put' – goten

+0

非常感謝。它工作現在:) – user3131769

1

下面是一個簡單的例子。你應該能夠改進。 (你可能有興趣在這個Java「教程」 http://docs.oracle.com/javaee/7/tutorial/doc/jsonp.htm#GLRBB

(這個例子使用了Java EE(和可以在這裏包括JSON參考實現:https://java.net/projects/jsonp/downloads/directory/ri

package com.demo; 
import java.io.FileWriter; 
import java.io.IOException; 
import javax.json.Json; 
import javax.json.stream.JsonGenerator; 

public class JSONExample { 
public static void main(String[] args) { 
    FileWriter writer = null; 
    try { 
     writer = new FileWriter("C:\\Users\\Joseph White\\Downloads\\jsontext.txt"); 
    } catch (IOException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    JsonGenerator gen = Json.createGenerator(writer); 

    gen.writeStartObject().write("name", "sample") 
     .writeStartArray("def") 
      .writeStartObject().write("setId", 1) 
      .writeStartArray("setDef") 
       .writeStartObject().write("name", "ABC").write("type", "STRING") 
       .writeEnd() 
       .writeStartObject().write("name", "XYZ").write("type", "STRING") 
       .writeEnd() 
      .writeEnd() 
      .writeEnd() 
      .writeStartObject().write("setId", 2) 
       .writeStartArray("setDef") 
       .writeStartObject().write("name", "abc").write("type", "STRING") 
       .writeEnd() 
       .writeStartObject().write("name", "xyz").write("type", "STRING") 
       .writeEnd() 
       .writeEnd() 
      .writeEnd() 
      .writeEnd() 
     .writeEnd(); 

    gen.close(); 

} 

}