Java 如何使用Jackson JsonGenerator向JSON添加列表

Java 如何使用Jackson JsonGenerator向JSON添加列表,java,json,arraylist,jackson,Java,Json,Arraylist,Jackson,我正在尝试使用Jackson JsonGenerator将对象列表写入JSON。 我想知道这是否可能 我有一个hashmap,形成为键,列表 我正在使用Jackson JsonGenerator创建JSON。并且希望能够简单地添加对象列表,而不是单独处理/循环列表中的每个对象 这可能吗 JsonFactory factory = new JsonFactory(); StringWriter sw = new StringWriter(); JsonGenerator g

我正在尝试使用Jackson JsonGenerator将对象列表写入JSON。 我想知道这是否可能

我有一个hashmap,形成为键,列表

我正在使用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"}]}
}
如果需要将数据写入数组,可以使用以下方法:

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" : [ {
      "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" ]
  } ]
}