我正在尝试使用RestTemplate使用REST服务。我无法反序列化JSON响应。我正在使用一个自定义反序列化程序,我的JSON有3个节点,但看起来只有一个节点到达反序列化程序。以下是更多详细信息。
以下是JSON的响应:
{
"Hello": {
"Hi": "Name1",
"Call": "PhoneNumber1"
},
"Hello": {
"Hi": "Name2",
"Call": "PhoneNumber2"
},
"Hello": {
"Hi": "Name3",
"Call": "PhoneNumber3"
}
}
我正在使用@jsondeselizer对属性Hello的响应类使用自定义反序列化器。
当我执行如下readTree时:
JsonNode node = jp.getCodec().readTree(jp);
它到达了反序列化方法,看起来它只有一个节点,而不是下面的3个节点。有时它有第一个节点,有时有最后一个节点。这里会出什么问题?
提前感谢您查看此问题并提供帮助!
答:正如其他人提到的,这个JSON是无效的,因此Jackson无法对其进行反序列化。我必须将响应作为字符串获取,然后手动反序列化。
这很可能是因为这是无效的JSON,您不能有三个同名的节点。
或者严格地说,这不是一个错误,但只有一个名为“Hello”的项会被解释为这个答案中所述的,这是不好的,因为json不能保证对象中的项的顺序,只能保证列表中的项的顺序。
如果您有可能更改响应,我将转而创建一个对象数组。
{“Hello”:[{“Hi”:“Name1”,“Call”:“PhoneNumber1”},{“Hi”:“Name2”,“Call”:“PhoneNumber2”},{“Hi”:“Name3”,“Call”:“PhoneNumber3”}]}
然后你会得到一个JsonNode,它是一个可以迭代的JsonNode数组。
JsonNode是一个没有特定内容行为的超类。在您的示例中,您应该得到一个ObjectNode,但由于您的属性都具有相同的名称,因此只剩下一个“Hello”属性readTree()
是一种通用方法,如果可能,它会自动转换为所需的返回类型。
如果您真的需要这个,您必须将JSON移动到数组结构:
// you will get one ArrayNode containing multiple ObjectNode
[
{
"Hello": {
"Hi": "Name1",
"Call": "PhoneNumber1"
}
},
{
"Hello": {
"Hi": "Name2",
"Call": "PhoneNumber2"
}
},
{
"Hello": {
"Hi": "Name3",
"Call": "PhoneNumber3"
}
}
]
或
// you will get one ObjectNode containing one property with an ArrayNode
{
"Hello": [
{
"Hi": "Name1",
"Call": "PhoneNumber1"
},
{
"Hi": "Name2",
"Call": "PhoneNumber2"
},
{
"Hi": "Name3",
"Call": "PhoneNumber3"
}
]
}
我似乎很专注于如何去硬化数组数组。我对这些工具很陌生,无法处理JSON文件,我能够去硬化来自国家(https://restcountries.eu/rest/v2/all)的REST应用编程接口的JSON,但我现在正试图从开放天空应用编程接口(https://opensky-network.org/api/states/all?lamin=45.8389 我有这门课: 有能手和二传手 还有这个:
我在试着读我的。json文件。Is是一个车辆存储类。 这是错误: com.fasterxml.jackson.databind.exc.MismatchedInputException:无法构造的实例(尽管至少存在一个Creator):无法构造的实例(尽管至少存在一个Creator):没有字符串参数构造函数/工厂方法来从[Source:(File); line: 1,列: 1]处的字符串值反序列化
问题内容: 我正在使用JAVA 1.6和Jackson 1.9.9我有一个枚举 我添加了一个@JsonValue,这似乎可以将对象序列化为: 但是当我尝试反序列化时,我得到了 我在这里想念什么? 问题答案: 如果你希望将枚举类与其JSON表示完全脱钩,则@xbakesx指出的序列化器/反序列化器解决方案是一个很好的解决方案。 另外,如果你喜欢一个独立的解决方案,则基于·和·注释的实现会更方便。 因
我的POJO是:
问题内容: 我无法找出使用杰克逊实现自定义序列化/反序列化的正确方法。我有很多类(〜50),它们带有应被序列化/反序列化而不是原始的原始字段。喜欢: 所有序列化和反序列化都非常相似,我只需要在整数之后添加一个后缀(C,页面,米等)。 一种简单的方法是在每个这样的字段中添加一对/ 注释并实现它们。但是我最终会得到100个 非常相似的 序列化器/反序列化器。 我想到了添加自定义注释的各个领域,说或,这
可以序列化/反序列化< code >映射吗 在这种特殊情况下,我知道总是,和 - 第三方类(我有序列化器和反序列化器),其他值是盒装原语。 有可能和杰克逊做这样的事吗?使用MapSerializer/MapDeserializer可以做到这一点吗?(我找不到任何例子)