我在获取嵌套数组中的字段之一时遇到问题。
首先,我试图像这样遍历我的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] 删除。
我来说两句