gpt4 book ai didi

java - 使用 Jackson 解析非同质 JSON 对象数组

转载 作者:行者123 更新时间:2023-12-02 02:59:07 25 4
gpt4 key购买 nike

我遇到了一种情况,需要解析一组不相同的 JSON 对象。

例如:

[ 
{ "type": "type1", ..... type1 contents .... },
{ "type": "type2", ..... type2 contents .... },
....
{ "type": "type1", ..... type1 contents .... }
]

类型的数量是有限的,并且每种类型的内容都可以很好地定义,但不可能定义将保存内容的单一类型的对象。

有没有办法用 Jackson 解析它们?

附注如果可以的话,我会尽量避免编写自定义解析器。

最佳答案

我会使用

com.fasterxml.jackson.databind.JsonNode

JsonNode parsed = objectMapper
.readValue("[{\"name\": \"a\"},{\"type\":\"b\"}]", JsonNode.class);

此类有大量实用方法可供使用。

或者特定于您可以使用的数组:

com.fasterxml.jackson.databind.node.ArrayNode

ArrayNode value = objectMapper
.readValue("[{\"name\": \"a\"},{\"type\":\"b\"}]", ArrayNode.class);

编辑

抱歉,我误读了您的问题,您可以使用@JsonTypeInfo进行多态序列化/反序列化:

public static void main(String args[]) throws JsonProcessingException {

//language=JSON
String data = "[{\"type\":\"type1\", \"type1Specific\":\"this is type1\"},{\"type\":\"type2\", \"type2Specific\":\"this is type2\"}]";
ObjectMapper objectMapper = new ObjectMapper();

List<BaseType> parsed = objectMapper.readValue(data, new TypeReference<List<BaseType>>() {});
System.out.println(parsed);
}


@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type", include = JsonTypeInfo.As.PROPERTY)
@JsonSubTypes(value = {
@JsonSubTypes.Type(value = Type1.class, name = "type1"),
@JsonSubTypes.Type(value = Type2.class, name = "type2")
})
static public abstract class BaseType {
public String type;
}
static public class Type1 extends BaseType {
public String type1Specific;
@Override
public String toString() {
return "Type1{" +
"type1Specific='" + type1Specific + '\'' +
'}';
}
}
static public class Type2 extends BaseType {
public String type2Specific;

@Override
public String toString() {
return "Type2{" +
"type2Specific='" + type2Specific + '\'' +
'}';
}
}

以下是文档:

https://github.com/FasterXML/jackson-docs/wiki/JacksonPolymorphicDeserialization

希望这有帮助。

结果将是:

[Type1{type1Specific='this is type1'}, Type2{type2Specific='this is type2'}]

关于java - 使用 Jackson 解析非同质 JSON 对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60329302/

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