【问题标题】:JSON to Object conversion in Java [duplicate]Java中的JSON到对象转换[重复]
【发布时间】:2020-11-07 06:24:37
【问题描述】:

让我们举个例子,我的对象 Person 在下面有 2 个属性

public class Person {

    String name;
    Integer age;

    //getters and setters
}

但是 jsonaray 包含超过 2 个属性

[{
    "name": "ab",
    "age": 18,
    "c": "dc",
    "d": "ef"
}]

这里有额外的元素 c 和 d。我可以将该 jsonarray 转换为设置人员对象吗?

【问题讨论】:

  • 你使用的是哪个 json 库?
  • 另外,你想让多余的元素 c 和 d 发生什么?
  • 要忽略 c 和 d 吗?
  • 顺便说一句,您的 JSON 无效。 "d":"ef" 后面不能有","
  • 你为什么不试试呢?

标签: java json


【解决方案1】:

你有多种选择

  1. 编写 JSON 代码解析你自己(我希望这不是这里的期望)。
  2. 使用可用的框架/JSON 解析器库。

一个这样的框架是jackson。你可以实现你所需要的如下

public static void main(String[] args) throws Exception {

   //Step 1. Create and set properties of ObjectMapper.
   // You need FAIL for unknow properties false for your case
   ObjectMapper mapper = new ObjectMapper();
   mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
       
   String jsonStr = {
                    "name": "ab",
                    "age": 18,
                    "c": "dc",
                    "d": "ef"
                   };
       try{
            //Step 2: call mapper to convert it to your class
            Person person = mapper.convertValue(jsonStr, Data.class);
        }catch(IllegalArgumentException e){
            //log error
        }
}



【讨论】:

    【解决方案2】:

    由于我们不知道您使用的是哪个库,我会继续假设您使用的是最常见的库 - Jackson

    Person 类上使用 @JsonIgnoreProperties(ignoreUnknown = true) 注释。 此注释允许您忽略 JSON 中未映射到 POJO 中的字段的任何字段。

    【讨论】:

      猜你喜欢
      • 2014-05-07
      • 1970-01-01
      • 1970-01-01
      • 2016-08-26
      • 2013-08-02
      • 2021-01-16
      • 2018-07-19
      • 1970-01-01
      • 2014-09-22
      相关资源
      最近更新 更多