【发布时间】:2026-02-15 23:25:01
【问题描述】:
说我有一个
class Person {
ArrayList<MyOtherObject> lstObjects;
...
}
然后
Map<Integer, Person> personMap
想要使用 Jackson Streaming API 序列化该地图?
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() 抛出异常,表示它需要一个值。
任何想法如何做到这一点?
【问题讨论】:
-
您要创建什么 JSON 结构?从代码上看不是很清楚。
-
我只是想以某种方式将它保存到文件中,但我试图用键/对象或类似的东西创建一个数组。 PersonMap:{[key, Person], [key, Person]} 伪代码。
-
如果您只想将对象保存到文件中,则无需使用 Streaming API:通过 ObjectMapper 进行数据绑定就可以了。比如:new ObjectMapper().writeValue(new File("output.json"), myObject);
标签: java json serialization jackson