将 JSON 属性解析为字符串列表 属性

Parsing JSON properties into list of strings property

我在我的项目中使用 Java Spring。

我需要将 JSON 解析为 java class。

JSON示例:

[
  {
    "Id":"aaa1"
    "Data1":"test11"
    "Data2":"test12"
    "url1": "https://...someimg11.png",
    "url2": "https://...someimg12.png",
  },
  {
    "Id":"aaa2"
    "Data1":"test21"
    "Data2":"test22"
    "url1": "https://...someimg21.png",
    "url2": "https://...someimg22.png",
  },
  {
    "Id":"aaa3"
    "data1":"test31"
    "data2":"test32"
    "url1": "https://...someimg31.png",
    "url2": "https://...someimg32.png",
  }
 ]
 

这里 Java class 上面 json 应该被解析为:

  class Info{
    @JsonProperty("Id")
    public String id;
    
    @JsonProperty("Data1")
    public String data1;
    
    @JsonProperty("Data2")
    public String data2;
    
    //parse to here url1 and url2 properties from json doc
    public List<String> urls;
 }
 

如您所见,除了 JSON url1 和 url2 中的最后一个属性,我没有解析属性的问题, JSON 文件 url1 和 url2 的属性应解析为 List 类型的 URL 属性。

我的问题是,如何解析 class 类型字符串列表中单个 属性 中 JSON 的两个属性?

更新 我可以按照其中一个答案的建议使用 @JsonAnySetter 注释,但在这种情况下,我需要初始化 url 属性,否则,我在解析时会遇到此错误:

Cannot invoke "java.util.List.add(Object)" because "this.urls" is null

如果我使用@JsonAnySetter 注释,我该如何初始化 urls 属性?

您可以使用 @JsonAnySetter 注释来完成,如果有更简单的使用模式或通配符的方法,我不会这样做

class Info{

    @JsonProperty("Id")
    public String id;

    @JsonProperty("Data1")
    public String data1;

    @JsonProperty("Data2")
    public String data2;

     //parse to here url1 and url2 properties from json doc
     public List<String> urls = new ArrayList<>();

     @JsonAnySetter
     public void add(String key, String value) {
      if(key.equals("url1") || key.equals("url2")) {
           urls.add(value);
        }
    }
  }