如何编写自定义 json 序列化程序并将值序列化为数组

How to write custom json serializer and serialize value as an array

我需要将具有三个字段(一个是对象列表)的简单 java 对象序列化为 json 看起来像这样:

{
"id": "1",
"fields": [
    {
        "value": {
                "someNumber": "0.0.2"
            },
        "id": "67"
    }
],
"name": "Daniel"}

我已经阅读了有关自定义序列化器 StdSerializer 和 JsonGenerator 的指南,但我不理解,要将 "name": "Daniel" 写入 json,您需要做一些类似 gen.writeObjectField("name", name); 的事情,但我无法得到我的专注于两件事:

  1. 如何像这里一样写一些字符串值:

        "value": {
          "name": "0.0.2"
        },
    
  2. 以及如何将 java 列表写成这样的数组:

    "fields": [
    {
        "value": {
                "someNumber": "0.0.2"
            },
        "id": "67"
    }]
    

其中“fields”是一个包含两个字段的对象的列表:“value”和“id”。 感谢任何帮助

像这样


public class Test {
    public static void main(String[] args) throws IOException {
        String ret;
        ByteArrayOutputStream bos = new ByteArrayOutputStream();

        ObjectMapper mapper = new ObjectMapper();
        JsonGenerator jg = mapper.getJsonFactory().createJsonGenerator(new PrintWriter(bos));

        jg.writeStartObject();

        jg.writeStringField("id", "1");

        jg.writeArrayFieldStart("fields");

        jg.writeStartObject();
        jg.writeObjectFieldStart("value");
        jg.writeStringField("someNumber","0.0.2");
        jg.writeEndObject();
        jg.writeStringField("id","67");
        jg.writeEndObject();

        //you can write more objects in fields here
        jg.writeEndArray();

        jg.writeStringField("name","Daniel");

        jg.writeEndObject();

        jg.flush();
        jg.close();

        ret = bos.toString();
        bos.close();
        System.out.println(ret);

    }
}

结果是

{
    "id":"1",
    "fields":[
        {
            "value":{
                "someNumber":"0.0.2"
            },
            "id":"67"
        }
    ],
    "name":"Daniel"
}