当前位置: 首页 > 知识库问答 >
问题:

Jackson--将java列表写入json数组的最佳方法

景承教
2023-03-14

我想使用jackson将ArrayList转换为JSONArray。

event.java:这是一个java bean类,有两个字段“field1”和“field2”映射为JSONProperty。

转换

ArrayList<Event> list = new ArrayList<Event>();
    list.add(new Event("a1","a2"));
    list.add(new Event("b1","b2"));

[
{"field1":"a1", "field":"a2"},
{"field1":"b1", "field":"b2"}
]

我能想到的方法是:writeListToJsonArray():

public void writeListToJsonArray() throws IOException {  
    ArrayList<Event> list = new ArrayList<Event>();
    list.add(new Event("a1","a2"));
    list.add(new Event("b1","b2"));

    OutputStream out = new ByteArrayOutputStream();

    JsonFactory jfactory = new JsonFactory();
    JsonGenerator jGenerator = jfactory.createJsonGenerator(out, JsonEncoding.UTF8);
    ObjectMapper mapper = new ObjectMapper();
    jGenerator.writeStartArray(); // [

    for (Event event : list) {
        String e = mapper.writeValueAsString(event);
        jGenerator.writeRaw(usage);
        // here, big hassles to write a comma to separate json objects, when the last object in the list is reached, no comma 
    }

    jGenerator.writeEndArray(); // ]

    jGenerator.close();

    System.out.println(out.toString());
}
generator.write(out, list)  
generator.write(out, list1)

generator.write(out, list2)

共有1个答案

赵超
2023-03-14

这太复杂了,Jackson通过它的writer方法处理列表,就像它处理常规对象一样。假设我没有误解你的问题,这对你来说应该很好:

public void writeListToJsonArray() throws IOException {  
    final List<Event> list = new ArrayList<Event>(2);
    list.add(new Event("a1","a2"));
    list.add(new Event("b1","b2"));

    final ByteArrayOutputStream out = new ByteArrayOutputStream();
    final ObjectMapper mapper = new ObjectMapper();

    mapper.writeValue(out, list);

    final byte[] data = out.toByteArray();
    System.out.println(new String(data));
}
 类似资料:
  • 问题内容: 我想使用杰克逊将ArrayList转换为JsonArray。 Event.java :这是Java bean类,其中两个字段“ field1”,“ field2”映射为JsonProperty。 我的目标是: 兑换 至 我能想到的方式是: writeListToJsonArray() : 我正在寻找类似的东西: 这将列表直接转换为json数组格式,然后将其写入outputstream“

  • 我必须以JSON格式转换数据表单以发送到webAPI。 我有一个从第1页调用的弹出表单: 第1页有以下代码: 输出JSON不正确。代码返回如下字符串: ! DOCTYPE html 什么是最好的方法来字符串化输入数据?我哪里错了?

  • 问题内容: 如标题所示,我正在寻找最快的方式将整数数组写入文件。数组的大小将有所不同,并且实际上包含2500至25000000 int之间的任何位置。 这是我目前正在使用的代码: 鉴于DataOutputStream有一种写入字节数组的方法,我已经尝试将int数组转换为字节数组,如下所示: 像这样: 两者似乎都使速度略有提高,约为5%。我没有对它们进行足够严格的测试以确认这一点。 是否有任何技术可

  • 问题内容: 我需要使用java nio将巨大的字符串写入(附加)到平面文件。编码为ISO-8859-1。 目前,我们正在编写如下图所示。有没有 更好的 方法可以做到这一点? 编辑:尝试了两个选项。以下是结果。 使用ByteBuffer和Channel:花费了4402 ms 使用缓冲的Writer:占用563毫秒 问题答案: 我认为,如果不对软件进行基准测试,您将无法得到严格的答案。在适当的条件下,

  • 问题内容: 我正在尝试使用Java中的分数。 我想实现算术函数。为此,我首先需要一种将功能标准化的方法。我知道我只有一个公分母才能将1/6和1/2加起来。我将不得不添加1/6和3/6。天真的方法会让我加2/12和6/12,然后减少。如何以最少的性能损失获得一个共同的分母?哪种算法最适合呢? 版本8(感谢hstoerr): 改进包括: 现在equals()方法与compareTo()方法一致 问题答

  • 问题内容: 我想知道打印2D阵列的最佳方法是什么。这是我的一些代码,我只是想知道这是否是一种好习惯。如果发现任何其他错误,请更正我在此代码中犯的任何其他错误。谢谢! 问题答案: 你可以用简单的方式打印。 在下面使用以打印2D阵列 在下面使用以打印一维阵列