java - 使用深层数组创建 JSON 文件

标签 java json arrays json-simple

我需要使用以下结构创建新的 json 文件,因为我在结构/数组中有结构,所以我无法成功,该文件应如下所示: 知道如何创建这样的吗?

 {

    "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");

...

最佳答案

[更新]我已经编辑了我的答案,因为它应该返回不同的 json。我不知道这是否是最好的解决方案,但它有效,而且易于阅读和维护。

根据 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);
    }

}

EntryListContainer 类:

import java.util.ArrayList;

import com.google.gson.annotations.SerializedName;

public class EntryListContainer {

    @SerializedName("Entry1")
    private ArrayList<Entry> entryList1;
    @SerializedName("Entry2")
    private ArrayList<Entry> entryList2;

    public void setEntryList1(ArrayList<Entry> entryList1) {
        this.entryList1 = entryList1;
    }

    public ArrayList<Entry> getEntryList1() {
        return entryList1;
    }

    public void setEntryList2(ArrayList<Entry> entryList2) {
        this.entryList2 = entryList2;
    }

    public ArrayList<Entry> getEntryList2() {
        return entryList2;
    }

}

条目POJO:

public class Entry {

    private int id;
    private String type;
    private String property;

    public void setId(int id) {
        this.id = id;
    }

    public int getId() {
        return id;
    }

    public void setType(String type) {
        this.type = type;
    }

    public String getType() {
        return type;
    }

    public String getProperty() {
        return property;
    }

    public void setProperty(String property) {
        this.property = property;
    }

}

它将返回这个 json:

{

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

}

关于java - 使用深层数组创建 JSON 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16937544/

相关文章:

c - 打印无符号数组并退出循环

java - 更改 ImageIcon 的大小

javascript - 在一个选择标签中显示 JSON 对象

json - 无法将类型 '__NSCFBoolean' (0x1b5905868) 的值转换为 'NSDecimalNumber' (0x1b5912c70)

java - 由字节/短整型组成的 Java 数组比整数组成的内存效率更高吗?

java - 用范围内的随机数字填充数组

java - 找不到符号:方法prepareStatement(String)位置:类型连接

java - 代码覆盖率中应该包含注释吗?

java - 在 EL 中的匿名内部类 bean 上调用带有参数的方法

JavaScript 无法解析 JSON