如何编写自定义 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);
的事情,但我无法得到我的专注于两件事:
如何像这里一样写一些字符串值:
"value": {
"name": "0.0.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"
}
我需要将具有三个字段(一个是对象列表)的简单 java 对象序列化为 json 看起来像这样:
{
"id": "1",
"fields": [
{
"value": {
"someNumber": "0.0.2"
},
"id": "67"
}
],
"name": "Daniel"}
我已经阅读了有关自定义序列化器 StdSerializer 和 JsonGenerator 的指南,但我不理解,要将 "name": "Daniel"
写入 json,您需要做一些类似 gen.writeObjectField("name", name);
的事情,但我无法得到我的专注于两件事:
如何像这里一样写一些字符串值:
"value": { "name": "0.0.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"
}