【问题标题】:How to igone a jackson array element on the basis of a property value?如何根据属性值忽略杰克逊数组元素?
【发布时间】:2017-04-27 07:27:00
【问题描述】:

我有一个从 api A 接收的这种格式的传入 json

{
  person:[
{
 "name": "A"
 "gender": "male"
},

{
 "name": "A"
 "gender": "female"
},

{
 "name": "A"
 "gender": "male"
}
]
}

我想过滤性别为女性的元素,并在我的端点上以这样的格式给出响应 json

{
  person:[
{
 "name": "A"
 "gender": "male"
},

{
 "name": "A"
 "gender": "male"
}
]
}

有没有办法在映射/序列化过程中使用杰克逊注解来做到这一点

@JsonAutoDetect
@JsonIgnoreProperties(ignoreUnknown = true)
public class Person{

 private String name;

 private String gender;

 //getter setters
}

@JsonAutoDetect
@JsonIgnoreProperties(ignoreUnknown = true)
public class JsonResponseModel{
  private List<Person> person;

  //getter setter

}

【问题讨论】:

  • 我不这么认为....我不想隐藏 json 属性,如果属性值为“女性”,我想忽略整个元素
  • 你想过滤掉女性元素,这意味着你需要为女性过滤 JsonResponseModel。如果我没记错的话,这个问题的回答正好提供了这一点。或者,您可以在发送之前手动过滤掉 jsonResponse。
  • 我只能手动操作,就像我只能从列表中删除元素一样,建议我只映射/序列化符合条件的元素,有没有办法?
  • 您收到哪个元素?如果 JsonResponseModel 然后对其进行过滤,否则不要添加从 Person 收到的元素。请仔细阅读链接。

标签: java json spring spring-boot jackson


【解决方案1】:

您可以使用JsonPath 过滤任何 json,以便仅从 json 中获取女性数据,请使用此链接 jsonPath checking

使用此json路径获取所有女性。

 $.person.[?(@.gender=='female')] 

并使用json fomatter 格式化您的json。

将 json 和 jsonpath 放在第一个链接中,您将获得过滤后的 json,其中显示了女性性别数据。

【讨论】:

  • 似乎是一个 jquery 解决方案...我在 java spring boot 环境中工作。
  • 要在java中使用你需要使用我的第二个答案
猜你喜欢
  • 2015-03-28
  • 1970-01-01
  • 1970-01-01
  • 2018-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
  • 2016-04-19
相关资源
最近更新 更多