作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个以下格式的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 格式。键列表不受限制/限制。最佳答案
我没有看到 SingleValuedAttribute
和 MultiValuedAttribute
类之间的区别。 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/
出于好奇,我尝试了一些原型(prototype)制作,但似乎只允许在第一个位置使用子例程的原型(prototype) &。 当我写作时 sub test (&$$) { do_somethin
我需要开发一个类似于 Android Play 商店应用程序或类似 this app 的应用程序.我阅读了很多教程,发现几乎每个教程都有与 this one 类似的例子。 . 我已经开始使用我的应用程
考虑一个表示“事件之间的时间”的列: (5, 40, 3, 6, 0, 9, 0, 4, 5, 18, 2, 4, 3, 2) 我想将这些分组到 30 个桶中,但桶会重置。期望的结果: (0, 1,
我是一名优秀的程序员,十分优秀!