java - JSON解析数组和同名单个对象

标签 java json

我需要解析来自外部源的 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 对象的任何方法吗?

最佳答案

您只需要使用 List<Names> 类型的单个字段,然后激活功能 ACCEPT_SINGLE_VALUE_AS_ARRAY

YourClass result = mapper.reader(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY)
                         .forType(YourClass.class)
                         .readValue(json);

关于java - JSON解析数组和同名单个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45091075/

相关文章:

java - GWT 中的数字键盘

ios - 如何在 iOS Objective-C 中使用 AFNetworking 库下载 .json 文件?

javascript - 如何使用 React-native-element 复选框和 FlatList React Native 处理从 json 获取的复选框?

javascript - 如何发送 REST 调用并返回 json 和结果?

java - 仅当键不存在时如何组合两个 HashMap?

java - SwingUtilities.InvokeLater 和 ButtonListeners

java - 如何在模型类android studio中创建列表

使用 docker-compose 运行我的应用程序时出现 java.security.KeyStoreException

c# - 将字典 <string, object> 传递给 MVC Controller

java - Camel 在死信队列中序列化json