有没有办法让Jackson将单个JSON对象解释为一个包含一个元素的数组,反之亦然?
例如,我有两种稍有不同的JSON格式,我需要两者都映射到同一个Java对象:
格式(包含一个元素的JSON数组):
points : [ {
date : 2013-05-11
value : 123
}]
格式B(JSON对象,是的,我知道它看起来“错了”,但我得到的是):
points : {
date : 2013-05-11
value : 123
}
目标Java以上两者都应转换为的对象:
//Data.java
public List<Point> points;
//other members omitted
//Point.java
class Point {
public String date;
public int value;
}
目前,只有A将正确解析为数据。我希望避免直接篡改JSON本身。Jackson中是否有一些配置我可以篡改以使其接受B?
可以解决上述问题的代码如下所示,这是可行的
final ObjectMapper objectMapper = new
ObjectMapper().enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
objectMapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);
try {
String jsonInString = objectMapper.writeValueAsString(products.get(j));
InventoryParser inventoryParser = objectMapper.readValue(jsonInString,
InventoryParser.class);
System.out.println(inventoryParser.getId());
}
catch (IOException e)
{
e.printStackTrace();
}
InventoryParser是一个POJO类,products.get(j)是JSON String。
与Jackson 1.x兼容的版本使用反序列化配置功能。接受单个值作为数组。因此,上述答案变为:
final String json = "{\"date\" : \"2013-05-11\",\"value\" : 123}";
final ObjectMapper mapper = new ObjectMapper()
.enable(DeserializationConfig.Feature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
final List<Point> points = mapper.readValue(json,
new TypeReference<List<Point>>() {
});
System.out.println(points);
尝试使用DeseriazationFeature。ACCEPT_SINGLE_VALUE_AS_ARRAY
-它应该为你工作。
例子:
final String json = "{\"date\" : \"2013-05-11\",\"value\" : 123}";
final ObjectMapper mapper = new ObjectMapper()
.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
final List<Point> points = mapper.readValue(json,
new TypeReference<List<Point>>() {});
问题内容: 有没有办法让Jackson将单个JSON对象解释为具有一个元素的数组,反之亦然? 例如,我有2种略有不同的JSON格式,我需要两者都映射到相同的Java对象: 格式 A (带有一个元素的JSON数组): 格式 B (JSON对象,是的,我知道它看起来“错误”,但这就是我给的): 以上两种都应转换为的目标Java对象: 当前,只有 A 可以正确解析为Data。我想避免直接篡改JSON本身
问题内容: 有没有办法让Jackson将单个JSON对象解释为具有一个元素的数组,反之亦然? 例如,我有2种略有不同的JSON格式,我需要两者都映射到相同的Java对象: 格式A(带有一个元素的JSON数组): 格式B(JSON对象,是的,我知道它看起来“错误”,但这就是我给的): 以上两种都应转换为的目标Java对象: 当前,只有A可以正确解析为Data。我想避免直接篡改JSON本身。我可以篡改
我希望在每个数组中获取多个对象,但我的代码显示了单个对象的操作。下面是我的PHP代码,我如何添加另一个循环来获取多个对象 这是显示单个物体的结果
问题内容: 谁能解释为什么在Python中将单个元素元组解释为该元素? 和 他们为什么不只是将元组打印为? 请参阅以下示例: 问题答案: 单个元素元组永远不会被视为包含的元素。括号对分组最有用,而不是对元组的创建。逗号会这样做。 他们为什么不只将(1,)打印为(1)? 可能是因为打印内置容器类型提供了一种表示形式,可用于通过表示重新创建容器对象,例如: 的docs在此方面提供了一些清晰度: 如果可
我使用Nodejs,有一个对象包含一个object数组(API请求的结果)和一个简单的值数组。 它们看起来是这样的: 如何将包含对象数组的对象与简单数组进行比较? 我要找的是,从简单数组中获取ID,并将它们与另一个“复杂”对象进行比较,以检索属性以及简单数组中的相应ID和另一个对象属性,然后将结果存储在一个对象数组中。 简单来说,我希望有这样的结果: 当从API请求中检索“复杂”对象时,我尝试了以
前言:众所周知,将指针1放在数组末尾是合法且定义明确的: 此指针可用于比较,这有助于C样式数组(或者更准确地说,其中的指针)与采用迭代器的标准库例程兼容,例如(Live Demo): 标准(C 03参考)支持其合法性和明确性: 5/将具有整型的表达式加到指针上或从指针上减去时,结果为指针操作数的类型。如果指针操作数指向数组对象的某个元素,并且数组足够大,则结果指向与原始元素偏移的元素,从而得到的数