如何使用Jackson JsonGenerator将列表添加到JSON中。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何使用Jackson JsonGenerator将列表添加到JSON中。相关的知识,希望对你有一定的参考价值。
我正试图用Jackson JsonGenerator将一个对象列表写成JSON。我想知道这是否可能。
我有一个hashmap,形成了Key,List。
我正在使用Jackson JsonGenerator创建一个JSON,希望能够简单地添加一个对象列表,而不是单独处理列表中的每个对象。
这可能吗?
JsonFactory factory = new JsonFactory();
StringWriter sw = new StringWriter();
JsonGenerator generator = factory.createGenerator(sw);
generator.setPrettyPrinter(new DefaultPrettyPrinter());
generator.writeStartObject(); // {
generator.writeFieldName("tags"); // {"tags":
generator.writeStartArray(); // {"tags": [
for ( String key : hm.keySet() ) {
log.info("Record to Convert to JSON: " + key);
generator.writeStartObject(); // {
generator.writeStringField("tagId", key); // { "tagId": "SAGE.esn.tag_name"
generator.writeFieldName("data"); // { "tagId": "SAGE.esn.tag_name", "data"
generator.writeStartArray(); // { "tagId": "SAGE.esn.tag_name", "data" : [
// generator.writeStartObject(); // { "tagId": "SAGE.esn.tag_name", "data" : [{
generator.write(hm.get(key));
generator.writeStringField("ts", data[0].trim()); // { "tagId": "NST_MD1_CRANK_CASE", "data" : [{"ts":"2017-11-15T19:55:00"
generator.writeEndObject(); // { "tagId": "SAGE.esn.tag_name", "data" : [{"ts":"2017-11-15T19:55:00","v" : "100","q":"3"}
generator.writeEndArray(); // { "tagId": "SAGE.esn.tag_name", "data" : [{"ts":"2017-11-15T19:55:00","v" : "100","q":"3"}]
generator.writeEndObject(); // { "tagId": "SAGE.esn.tag_name", "data" : [{"ts":"2017-11-15T19:55:00","v" : "100","q":"3"}]}
}
generator.writeEndArray(); // {"tags": [ { "tagId": "SAGE.esn.tag_name", "data" : [{"ts":"2017-11-15T19:55:00","v" : "100","q":"3"}]} ]
generator.writeEndObject(); // {"tags": [ { "tagId": "SAGE.esn.tag_name", "data" : [{"ts":"2017-11-15T19:55:00","v" : "100","q":"3"}]} ]}
generator.flush();
generator.close();
答案
是的,你几乎已经做到了。你应该只是通过你的列表迭代。
for ( String key : hm.keySet() ) {
log.info("Record to Convert to JSON: " + key);
generator.writeStartObject(); // {
generator.writeStringField("tagId", key); // { "tagId": "NST_MD1_CRANK_CASE"
generator.writeFieldName("data"); // { "tagId": "NST_MD1_CRANK_CASE", "data"
generator.writeStartArray(); // { "tagId": "NST_MD1_CRANK_CASE", "data" : [
generator.writeStartObject(); // { "tagId": "NST_MD1_CRANK_CASE", "data" : [{
List<String> data = hm.get(key);
generator.writeStringField("ts", data.get(0).trim()); // { "tagId": "NST_MD1_CRANK_CASE", "data" : [{"ts":"2017-11-15T19:55:00"
generator.writeStringField("v", data.get(1).trim()); // { "tagId": "NST_MD1_CRANK_CASE", "data" : [{"ts":"2017-11-15T19:55:00", "v":"100"
generator.writeStringField("q", data.get(2).trim()); // { "tagId": "NST_MD1_CRANK_CASE", "data" : [{"ts":"2017-11-15T19:55:00", "v":"100", "q":"3"
generator.writeEndObject(); // { "tagId": "NST_MD1_CRANK_CASE", "data" : [{"ts":"2017-11-15T19:55:00", "v":"100", "q":"3"}
generator.writeEndArray(); // { "tagId": "NST_MD1_CRANK_CASE", "data" : [{"ts":"2017-11-15T19:55:00", "v":"100", "q":"3"}]
generator.writeEndObject(); // { "tagId": "NST_MD1_CRANK_CASE", "data" : [{"ts":"2017-11-15T19:55:00", "v":"100", "q":"3"}]}
}
然后,如果你准备一些数据,
Map<String, List<String>> hm = new HashMap<>();
hm.put("NST_MD1_CRANK_CASE", Arrays.asList("2017-11-15T19:55:00", "100","3"));
hm.put("SAGE.esn.tag_name", Arrays.asList("2017-11-15T19:55:00", "100","3"));
并打印出其中的内容 StringWriter
将你选择的数据输出到控制台,你会得到以下结果。
{
"tags" : [ {
"tagId" : "NST_MD1_CRANK_CASE",
"data" : [ {
"ts" : "2017-11-15T19:55:00",
"v" : "100",
"q" : "3"
} ]
}, {
"tagId" : "SAGE.esn.tag_name",
"data" : [ {
"ts" : "2017-11-15T19:55:00",
"v" : "100",
"q" : "3"
} ]
} ]
}
如果你需要把数据写成一个数组,你可以用这个。
for ( String key : hm.keySet() ) {
log.info("Record to Convert to JSON: " + key);
generator.writeStartObject(); // {
generator.writeStringField("tagId", key); // { "tagId": "NST_MD1_CRANK_CASE"
generator.writeFieldName("data"); // { "tagId": "NST_MD1_CRANK_CASE", "data"
generator.writeStartArray(); // { "tagId": "NST_MD1_CRANK_CASE", "data" : [
List<String> data = hm.get(key);
for (String s : data) {
generator.writeString(s);
}
generator.writeEndArray(); // { "tagId": "NST_MD1_CRANK_CASE", "data" : ["2017-11-15T19:55:00", "100", "3"]
generator.writeEndObject(); // { "tagId": "NST_MD1_CRANK_CASE", "data" : ["2017-11-15T19:55:00", "100", "3"]}
}
那么同样的输入数据的输出是:
{
"tags" : [ {
"tagId" : "NST_MD1_CRANK_CASE",
"data" : [ "2017-11-15T19:55:00", "100", "3" ]
}, {
"tagId" : "SAGE.esn.tag_name",
"data" : [ "2017-11-15T19:55:00", "100", "3" ]
} ]
}
以上是关于如何使用Jackson JsonGenerator将列表添加到JSON中。的主要内容,如果未能解决你的问题,请参考以下文章