可以读取这个Json“ Map<String,Object>
” 样本并通过RegExp过滤Map键
Pojo样本
PojoSample包含一个以人名作为键的Map
public class PojoSample
{
private Map<String,Person> persons;
}
public class Person
{
private String id;
private String adresse;
}
Json Imput包含2个人Paul&Jean,我需要按地图键(人名) Json输入:
{
"persons": {
"Paul": {
"id": "123",
"adresse": "abc"
},
"Jean": {
"id": "456",
"adresse": "def"
}
}
}
预期输出
{
"persons": {
"Paul": {
"id": "123",
"adresse": "abc"
}
}
}
我试过这两个impl但它不起作用
public class JsonPathTest
{
private static final Configuration configuration = Configuration.builder().jsonProvider(new JacksonJsonNodeJsonProvider())
.mappingProvider(new JacksonMappingProvider()).build();
@Test
public void testRead() throws IOException
{
String payload = FileUtils.readFileToString(new File("src/test/sample.json"), Charset.defaultCharset());
Predicate predicate = new Predicate()
{
@Override
public boolean apply(PredicateContext ctx)
{
return ctx.item(Map.class).containsKey("Paul");
}
};
DocumentContext documentContext = JsonPath.using(configuration).parse(payload);
documentContext.read("$.persons", Map.class, predicate);
}
@Test
public void testRead2() throws IOException
{
String payload = FileUtils.readFileToString(new File("src/test/sample.json"), Charset.defaultCharset());
DocumentContext documentContext = JsonPath.using(configuration).parse(payload);
documentContext.read("$.persons[?(@. =~ /.*Paul/i)]");
}
}
发布于 2018-12-11 13:26:07
我同意评论者的观点,即问题在于构建数据,使名称成为关键。是否有可能代之以如下的人名单?
{
"persons": [
{
"id": "123",
"name": "Paul",
"address": "abc"
},
{
"id": "456",
"name": "Jean",
"address": "def"
}
]
}
然后,您可以使用以下方法:
Predicate predicate = new Predicate() {
public boolean apply(PredicateContext ctx) {
return ctx.item(Map.class).get("name").equals("Paul");
}
};
System.out.println(documentContext.read("$.persons[?]", predicate).toString());
输出:
[{"id":"123","name":"Paul","address":"abc"}]
https://stackoverflow.com/questions/-100006253
复制相似问题