Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用深度数组创建JSON文件_Java_Json_Arrays_Json Simple - Fatal编程技术网

Java 使用深度数组创建JSON文件

Java 使用深度数组创建JSON文件,java,json,arrays,json-simple,Java,Json,Arrays,Json Simple,我需要使用以下结构创建新的json文件。我无法成功,因为我在structure/array中有结构,该文件应该如下所示: 你知道怎么做这样的吗 { "Entry1": [ { "id": "0001", "type": "USER", }, { "id": "0002", "type": "EMP", "property":

我需要使用以下结构创建新的json文件。我无法成功,因为我在structure/array中有结构,该文件应该如下所示: 你知道怎么做这样的吗

 {

    "Entry1": [
        {
            "id": "0001",
            "type": "USER",

        },
        {
            "id": "0002",
            "type": "EMP",
        "property":"Salery",

        }

],

"Entry2": [

    {
        "id": "0005",
        "name": "Vacation",
        "property":"user",

    },
    {
        "id": "0008",
        "name": "Work",

        }
    ]

}
我试图使用以下代码,但没有成功

JSONObject obj = new JSONObject();
obj.put("entry1", null);

JSONArray list = new JSONArray();
list.add("id");
list.add("USER");

..

试试谷歌gson项目。它有一个简单的方法来连接对象。不管它有多深。支持所有集合


[https://code.google.com/p/google-gson/][1] 试试谷歌gson项目。它有一个简单的方法来连接对象。不管它有多深。支持所有集合

[https://code.google.com/p/google-gson/][1] 使用。使用它创建任意JSON值非常简单:

final JsonNodeFactory factory = JsonNodeFactory.instance;

final ObjectNode baseNode = factory.objectNode();

ArrayNode array;
ObjectNode element1, element2;

// create elements
element1 = factory.objectNode();
element1.put("id", whatever);
// etc, then

array = factory.arrayNode();
array.add(element1);
array.add(element2);
baseNode.put("Entry1"), array;

// etc; then print baseNode.toString() in the file
它还通过智能猜测对POJO的{de,}序列化提供了极好的支持,因此您甚至可以在不使用任何注释的情况下反序列化POJO列表(请参见
ObjectMapper
)。

使用。使用它创建任意JSON值非常简单:

final JsonNodeFactory factory = JsonNodeFactory.instance;

final ObjectNode baseNode = factory.objectNode();

ArrayNode array;
ObjectNode element1, element2;

// create elements
element1 = factory.objectNode();
element1.put("id", whatever);
// etc, then

array = factory.arrayNode();
array.add(element1);
array.add(element2);
baseNode.put("Entry1"), array;

// etc; then print baseNode.toString() in the file

它还非常支持POJO的{de,}序列化,并具有智能猜测功能,因此您甚至可以在不使用任何注释的情况下反序列化POJO列表(请参见
ObjectMapper
)。

[UPDATE]我编辑了我的答案,因为它应该返回不同的json。我不知道这是否是bes的解决方案,但它是有效的,而且它是清晰的阅读和维护

根据Anand的回答,这里是一个使用Gson的简单示例。我认为这是一个很好的解决方案,因为您只需要创建POJO并使用Gson/Jackson将其序列化为json。您不需要手动创建json对象

JsonTest主类:

import java.util.ArrayList;

import com.google.gson.Gson;

public class JsonTest {

    public static void main(String[] main) {
        Entry entry1 = new Entry();
        entry1.setId(1);
        entry1.setType("USER");
        entry1.setProperty("Salary");
        Entry entry2 = new Entry();
        entry2.setId(2);
        entry2.setType("EMP");
        Entry entry3 = new Entry();
        entry3.setId(2);
        entry3.setType("EMP");
        entry3.setProperty("Work");
        Entry entry4 = new Entry();
        entry4.setId(2);
        entry4.setType("EMP");

        EntryListContainer entryListContainer = new EntryListContainer();
        ArrayList<Entry> entryList1 = new ArrayList<Entry>();
        ArrayList<Entry> entryList2 = new ArrayList<Entry>();

        entryList1.add(entry1);
        entryList1.add(entry2);
        entryList2.add(entry3);
        entryList2.add(entry4);

        entryListContainer.setEntryList1(entryList1);
        entryListContainer.setEntryList2(entryList2);

        String json = new Gson().toJson(entryListContainer, EntryListContainer.class);
        System.out.println(json);
    }

}
它将返回此json:

{

    "Entry1":[
        {
            "id":1,
            "type":"USER",
            "property":"Salary"
        },
        {
            "id":2,
            "type":"EMP"
        }
    ],
    "Entry2":[
        {
            "id":2,
            "type":"EMP",
            "property":"Work"
        },
        {
            "id":2,
            "type":"EMP"
        }
    ]

}

[UPDATE]我编辑了我的答案,因为它应该返回不同的json。我不知道这是否是bes的解决方案,但它是有效的,而且它是清晰的阅读和维护

根据Anand的回答,这里是一个使用Gson的简单示例。我认为这是一个很好的解决方案,因为您只需要创建POJO并使用Gson/Jackson将其序列化为json。您不需要手动创建json对象

JsonTest主类:

import java.util.ArrayList;

import com.google.gson.Gson;

public class JsonTest {

    public static void main(String[] main) {
        Entry entry1 = new Entry();
        entry1.setId(1);
        entry1.setType("USER");
        entry1.setProperty("Salary");
        Entry entry2 = new Entry();
        entry2.setId(2);
        entry2.setType("EMP");
        Entry entry3 = new Entry();
        entry3.setId(2);
        entry3.setType("EMP");
        entry3.setProperty("Work");
        Entry entry4 = new Entry();
        entry4.setId(2);
        entry4.setType("EMP");

        EntryListContainer entryListContainer = new EntryListContainer();
        ArrayList<Entry> entryList1 = new ArrayList<Entry>();
        ArrayList<Entry> entryList2 = new ArrayList<Entry>();

        entryList1.add(entry1);
        entryList1.add(entry2);
        entryList2.add(entry3);
        entryList2.add(entry4);

        entryListContainer.setEntryList1(entryList1);
        entryListContainer.setEntryList2(entryList2);

        String json = new Gson().toJson(entryListContainer, EntryListContainer.class);
        System.out.println(json);
    }

}
它将返回此json:

{

    "Entry1":[
        {
            "id":1,
            "type":"USER",
            "property":"Salary"
        },
        {
            "id":2,
            "type":"EMP"
        }
    ],
    "Entry2":[
        {
            "id":2,
            "type":"EMP",
            "property":"Work"
        },
        {
            "id":2,
            "type":"EMP"
        }
    ]

}

+我同意。阿南德,如果你能加上一些例子,那就太好了。Anand,如果你能添加一些示例,那就太好了。谢谢,当我使用你的代码时,我有一个错误,因为我没有这个jar for jackson,我如何添加它?这个源代码免费吗?它是双重许可的GPL/ASL。它有maven工件等。这意味着什么,我不能在我的公司免费使用它?我怎样才能得到这个maven工件?是的,你可以(因为ASL允许)。至于如何获得它,你不是已经使用maven了吗?如果没有,你可以直接下载jar。谢谢,当我使用你的代码时,我有错误,因为我没有这个jar给jackson,我如何添加它?这个源代码是免费的吗?它是双重许可的GPL/ASL。它有maven工件等。这意味着什么,我不能在我的公司免费使用它?我怎样才能得到这个maven工件?是的,你可以(因为ASL允许)。至于如何获得它,你不是已经使用maven了吗?如果不是,你可以直接下载JAR。谢谢,它是免费的吗?如果是的,我怎样才能得到JAR来避免错误?是的,当然,你可以使用它。我使用gradle来解决依赖关系,但您也可以使用maven,或者从maven中央存储库下载JAR并添加到类路径。Gson可以从这里下载(“下载:专栏”)谢谢Patrick,我仍然没有看到代码中的条目1和条目2,它们是键值字段数组的父项,因为当我打印它时,我没有看到条目1和条目2。很抱歉,我不知道。最好是你阅读gson用户指南。谢谢,它是源代码免费的吗?如果是,我如何获得JAR以避免错误?是的,当然,你知道可以使用它。我使用gradle解决依赖关系,但您也可以使用maven,或者从maven中央存储库下载JAR并添加到类路径。Gson可以从这里下载(“下载:列”)谢谢Patrick,我仍然没有看到代码中的条目1和条目2,它们是键值字段数组的父项,因为当我打印它时,我没有看到条目1和条目2。很抱歉,我不知道。最好是阅读gson用户指南。