gpt4 book ai didi

java - 如何使用 Jackson 流 API 序列化 map

转载 作者:太空宇宙 更新时间:2023-11-04 08:40:46 24 4
gpt4 key购买 nike

说我有一个

        class Person {
ArrayList<MyOtherObject> lstObjects;
...
}

然后

Map<Integer, Person> personMap

并且想要使用 Jackson Streaming API 序列化该 map ?

JsonGenerator g =...;

g.writeArrayFieldStart("PersonMap");

if (personMap != null) {
Iterator<Map.Entry<Integer, Person>> iter = personMap.entrySet().iterator();
while (iter.hasNext()) {

Map.Entry<Integer, Person> pairs = iter.next();
Integer key = (Integer) pairs.getKey();
Person person = (Person) pairs.getValue();
g.writeNumber(key.intValue());

person.saveToFileRaw(g); // Write the object

}
}
g.writeEndArray(); // PersonMap

和 person.saveToFileRaw 看起来像

try {
g.writeStartObject();

g.writeObjectFieldStart("Inf");
if (lstInfo != null) {
for (PersonInfo info: lstInfo)
info.saveToFileRaw(g); // Write another object
}
g.writeEndObject();

String s = PersonType.token(type);
g.writeStringField("Tp", s);
g.writeStringField("Add", address);

所以问题是:如何编写自定义对象的数组/映射? person.saveToFileRaw 中的 g.writeStartObject() 抛出异常,表示它需要一个值。

有什么想法可以做到这一点吗?

最佳答案

如果您从 JsonGenerator 调用中得到异常,则说明您正在尝试创建无效的 JSON 结构;无法解析的内容。

我在代码中看到的一个问题是,您首先调用“g.writeObjectFieldStart("Inf")”,但然后在循环中尝试调用以“g.writeStartObject”开头的方法——本质上是尝试写入起始对象标记“{”两次。

您还可以单独调用“writeFieldName”(而不是 writeObjectFieldStart()),您可能需要这样做。或者您可能需要对 PersonInfo 条目执行 writeStartArray(()/writeEndArray() ;这取决于您想要的确切输出。

关于java - 如何使用 Jackson 流 API 序列化 map <Integer, Custom object>?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5350181/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com