gpt4 book ai didi

java - 如何使用 Jackson 反序列化为基于 JSON 的列表或值?

转载 作者:行者123 更新时间:2023-12-02 06:45:33 26 4
gpt4 key购买 nike

我有一个以下格式的json,其中key代表属性类型,value代表该属性的值。

{ "attributes":
[
{
"key":"name",
"value":"Archit"
},
{
"key":"website",
"value":"stackoverflow"
},
{
"key":"languages",
"value":[
"python",
"java",
"c++"
]
}
]
}

我正在尝试使用 jackson 将其映射到以下 java 对象:

public class Attributes {
List<Attribute> attributes;
}



public abstract class Attribute {
String key;
}



public class SingleValuedAttribute extends Attribute{
String value;
}


public class MultiValuedAttribute extends Attribute{
List<String> value;
}


ObjectMapper mapper = new ObjectMapper();
Attributes attributes = mapper.readValue(new File(jsonFilePath), Attributes.class);

我尝试查看多态反序列化,但是 json 对象中需要类型信息,而我的 json 中不存在该类型信息?

关于如何执行此操作有任何提示吗?

PS:我无法更改 json 格式。键列表不受限制/限制。

最佳答案

我没有看到 SingleValuedAttributeMultiValuedAttribute 类之间的区别。 SingleValuedAttribute 类表示一个元素数组。您可以通过删除 POJO 类层次结构来简化它。

请参阅下面的示例:

import java.io.File;
import java.util.Arrays;
import java.util.List;

import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;

public class JacksonProgram {

public static void main(String[] args) throws Exception {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);

File json = new File("/x/test.json");
System.out.println(objectMapper.readValue(json, Attributes.class));
}
}

class Attributes {

private List<Attribute> attributes;

//getters, setters
}

class Attribute {

private String key;
private List<String> value;

//getters, setters
}

以上程序打印:

[Attribute [key=name, value=[Archit]], Attribute [key=website, value=[stackoverflow]], Attribute [key=languages, value=[python, java, c++]]]

关于java - 如何使用 Jackson 反序列化为基于 JSON 的列表或值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18673162/

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