【发布时间】:2019-03-11 14:42:51
【问题描述】:
我需要解析从外部来源传入的 JSON 数据。问题是有时数据数组被发送进来,有时它作为单个对象进来,但是数组和单个对象具有相同的名称。
{
"OuterObject": {
"Names":[
{
"name": "John Doe"
},
{
"name": "William Watson"
}
]
}
}
但是当 JSON 数组只有一个元素时,它看起来像这样:
{
"OuterObject": {
"Names": {
"name": "John Doe"
}
}
}
我的应用程序需要能够处理其中之一,但不能同时处理两者。
这就是我的 Json 解析类的样子:
@JsonRootName("OuterObject")
public class OuterObject {
@JsonProperty("Names")
private Names names;
@JsonProperty("Names")
private List<Names> namesList;
public Names getNames() {
return names;
}
public void setNames(Names names) {
this.names = names;
}
public List<Names> getNamesList() {
return namesList;
}
public void setNamesList(List<Names> namesList) {
this.namesList = namesList;
}
}
但是,对于列表和单个对象,使用相同的 json 属性名称似乎不起作用。它似乎也不只是使用数组并将单个 json 对象解析到列表中。当数组和对象具有相同的名称时,有谁知道我的应用程序可以处理 json 数组和单个 json 对象的任何方式?
【问题讨论】:
-
您发布的两个示例都是无效的 JSON。您真正收到了什么?你也没有说你正在使用哪个 JSON 解析器。
-
请说明您到目前为止所做的尝试。您使用的是 Jackson
ObjectMapper? -
已编辑以使 JSON 有效。
-
是的,我正在使用 Jackson ObjectMapper,如下所示:OuterObject myOuterObject = objectMapper.readValue(jsonString, OuterObject.class)。