2014-02-26 34 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(); 

} 

}