【问题标题】:Creating nested JSON object for the following structure in Java using JSONObject? [closed]使用 JSONObject 在 Java 中为以下结构创建嵌套 JSON 对象? [关闭]
【发布时间】:2014-03-29 08:31:02
【问题描述】:

我想使用 JSONObject 和 JSONArray 构建一个类似于 java 中的结构的 JSON 对象。

我在堆栈溢出中浏览了各种帖子,其中建议使用我无法为 JSONArray 识别的 push、put 等方法。请帮忙。

{
    "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"
                }
            ]
        }
    ]
}

【问题讨论】:

    标签: java json arrays jsonobject


    【解决方案1】:

    使用导入 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.JSONObjectnet.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 中将 'put' 方法替换为 'element',在 JSONArray 中将 'put' 方法替换为 'add'。

    【讨论】:

    【解决方案2】:

    这是一个粗略的例子。你应该可以精炼。 (你可能对这个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();
    
    }
    
     }
    

    【讨论】:

    猜你喜欢
    • 2014-11-02
    • 2017-08-21
    • 1970-01-01
    • 1970-01-01
    • 2018-11-24
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多