我需要解析来自外部源的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对象的任何方法?
答案 0 :(得分:1)
您只需使用HttpResponseMessage
类型的单个字段,并激活功能ACCEPT_SINGLE_VALUE_AS_ARRAY
List<Names>
答案 1 :(得分:1)
如果它只是一个JSONObject,我已经使用以下方法转换JSONArray。
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
private JSONArray getJSONArray(JSONObject json, String field) {
JSONArray array;
if(json.get(field) instanceof JSONObject){
array = new JSONArray();
array.add(json.get(field));
}else{
array = json.getJSONArray(field);
}
return array;
}
答案 2 :(得分:-1)
将您的json转换为Map,然后使用您的代码获得所需的结果。
ObjectMapper mapper = new ObjectMapper();
Map<String, Object> map = mapper.convertValue(json, Map.class);
或更好
Map<String, Object> map = mapper.convertValue(json, new TypeReference<Map<String, Object>>() {});