如何反序列化嵌套数组中的字段

乔恩·亚伯拉罕:

我在获取嵌套数组中的字段之一时遇到问题。

首先,我试图像这样遍历我的json的根数组-

                for(SearchHit h : hits){
                    String source = h.getSourceAsString().replace("null","\"\"");
                    
                    TestResponse svcResp = mapper.readValue(source, TestResponse.class);
                    dataResp.add(svcResp);
                }

现在源json看起来像这样-

 {

  "name": [
    {
      "family": "Doe",
      "given": "Jon",
      "middle": "Smith",
      "use": "Commercial"
    }
  ]
}

而我的pojo看起来像这样-

private String fstNm;
List<Map<String,Object>> name=null;
private List<Map<String,Object>> name;

public String getFstNm() { return fstNm; }


public void setFstNm(List<Map<String, Object>> hits) {

      name = (List) hits.get(0).get("name");

      this.fstNm= (String) name.get(0).get("given");
        

}

我的预期输出-

{
    "fstNm":"Jon"
}

但是我得到了实际的输出-

{
    "fstNm":null,
    "name": [
          {
            "family": "Doe",
            "given": "Jon",
            "middle": "Smith",
            "use": "Commercial"
          }
        ]

   }

我如何获得预期的输出?

更新发布我的整个pojo-

import com.fasterxml.jackson.annotation.JsonAlias;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.*;
import java.util.Map;
import java.util.List;

@AllArgsConstructor
@Setter
@Getter
public class TestResponse {

    @JsonProperty("dummyID")
    @JsonAlias("dummyID")
    private String dummyID;

 


    private String fstNm;


    private List<Map<String, Object>> name;

    public String getFstNm() {
        return fstNm;
    }

    public void setFstNm(String fstNm) {
        this.fstNm=fstNm;

    }


    public List<Map<String, Object>> getName() {
        return name;
    }

    public void setName(List<Map<String, Object>> name) {
        this.name = name;
        this.fstNm= (String) name.get(0).get("given");
    }

    public String getdummyId() {
        return dummyId;
    }

    public void setdummyId(String dummyId) {
        this.dummyId = dummyId;
    }
}
    
巴拉斯:

您只需在setName方法中设置fstName即可,因为name属性将被解析。

没有评论您是对还是错。只需发布一个可行的简单解决方案,当然还有许多其他方法可以实现它,例如自定义解串器等。

public class Test {

    @org.junit.Test
    public void test() throws JsonMappingException, JsonProcessingException {

        ObjectMapper mapper = new ObjectMapper();
        String input = "{\r\n" + "\r\n" + "  \"name\": [\r\n" + "    {\r\n" + "      \"family\": \"Doe\",\r\n"
                + "      \"given\": \"Jon\",\r\n" + "      \"middle\": \"Smith\",\r\n"
                + "      \"use\": \"Commercial\"\r\n" + "    }\r\n" + "  ]\r\n" + "}";
        System.out.println(input);

        System.out.println(mapper.readValue(input, TestResponse.class));
    }
    
    @JsonIgnoreProperties(ignoreUnknown = false)
    @JsonPropertyOrder({"name", "fstNm" })
    protected static class TestResponse {

        private String fstNm;
        
        
        private List<Map<String, Object>> name;

        public String getFstNm() {
            return fstNm;
        }

        public void setFstNm(String fstNm) {
            this.fstNm=fstNm;

        }       
        

        public List<Map<String, Object>> getName() {
            return name;
        }

        public void setName(List<Map<String, Object>> name) {
            this.name = name;
            this.fstNm= (String) name.get(0).get("given");
        }

        @Override
        public String toString() {
            return "Pojo [fstNm=" + fstNm + ", name=" + name + "]";
        }
        
        

    }
}

输出:

{

  "name": [
    {
      "family": "Doe",
      "given": "Jon",
      "middle": "Smith",
      "use": "Commercial"
    }
  ]
}
Pojo [fstNm=Jon, name=[{family=Doe, given=Jon, middle=Smith, use=Commercial}]]

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

反序列化JSON嵌套数组

使用Java中的嵌套数组反序列化YAML文件

如何使用Newtonsoft.Json在C#中使用嵌套数组反序列化json

使用System.Text.Json反序列化数组json对象的嵌套数组

如何使用GSON反序列化嵌套的JSON数组?

反序列化嵌套在数组中的对象

使用未知数量的表示查询的嵌套数组反序列化JSON

使用没有属性名称的嵌套数组反序列化 JSON C#

反序列化嵌套的Json数组

如何使用 Newtonsoft.Json 正确反序列化数组中的嵌套对象?

如何从 Firestore 反序列化 Unity 中的地图字段?

如何在 Javascript 中反序列化数组

如何在Symfony中反序列化数组

如何反序列化json数组?

如何在Kotlin中序列化/反序列化Custom对象数组?

使用动态字段反序列化嵌套的 XML

用Jackson序列化嵌套数组中的特定深度

如何反序列化JSON对象,但将特定字段保留为String而不是嵌套对象?

JSON.Net - 如何反序列化自定义类型的嵌套字段

使用Jackson将JSON响应中嵌套对象的字段反序列化

将JSON反序列化为C#对象以将嵌套数组显示为网格中的字符串

基于嵌套的type属性反序列化JSON数组

使用Jackson在反序列化JSON数组中反序列化JSON数组

JPA序列化/反序列化嵌套自动生成的字段

Json.net从JSon反序列化为可能包含数组或嵌套数组的对象

json数组中的嵌套项没有被反序列化

在C#中反序列化嵌套JSON数组的问题

如何在序列化过程中而不在反序列化过程中忽略字段?

序列化/反序列化嵌套的 POCO 属性而不在 json.net 中嵌套