Spring Expression 直接访问 Selection 中的映射键
Spring Expression Directly access map keys in Selection
考虑到我已经将一个 JSON 字符串解析为一个 Map<String, Object>
,它是任意嵌套的
我的 JSON 看起来像:
{
"root": [
{"k":"v1"},
{"k":"v2"}
]
}
我尝试了表达式 root.?[k == 'v1']
,但收到以下错误:
EL1008E: Property or field 'k' cannot be found on object of type 'java.util.LinkedHashMap' - maybe not public?
评估上下文需要 MapAccessor
:
public static void main(String[] args) throws Exception {
String json = "{\n" +
" \"root\": [\n" +
" {\"k\":\"v1\"},\n" +
" {\"k\":\"v2\"}\n" +
" ]\n" +
"}";
ObjectMapper mapper = new ObjectMapper();
Object root = mapper.readValue(json, Object.class);
Expression expression = new SpelExpressionParser().parseExpression("root.?[k == 'v1']");
StandardEvaluationContext ctx = new StandardEvaluationContext();
ctx.addPropertyAccessor(new MapAccessor());
System.out.println(expression.getValue(ctx, root));
}
结果:
[{k=v1}]
没有MapAccessor
,你需要
"['root'].?[['k'] == 'v1']"
A MapAccessor
仅适用于不包含句点的地图键。
考虑到我已经将一个 JSON 字符串解析为一个 Map<String, Object>
,它是任意嵌套的
我的 JSON 看起来像:
{
"root": [
{"k":"v1"},
{"k":"v2"}
]
}
我尝试了表达式 root.?[k == 'v1']
,但收到以下错误:
EL1008E: Property or field 'k' cannot be found on object of type 'java.util.LinkedHashMap' - maybe not public?
评估上下文需要 MapAccessor
:
public static void main(String[] args) throws Exception {
String json = "{\n" +
" \"root\": [\n" +
" {\"k\":\"v1\"},\n" +
" {\"k\":\"v2\"}\n" +
" ]\n" +
"}";
ObjectMapper mapper = new ObjectMapper();
Object root = mapper.readValue(json, Object.class);
Expression expression = new SpelExpressionParser().parseExpression("root.?[k == 'v1']");
StandardEvaluationContext ctx = new StandardEvaluationContext();
ctx.addPropertyAccessor(new MapAccessor());
System.out.println(expression.getValue(ctx, root));
}
结果:
[{k=v1}]
没有MapAccessor
,你需要
"['root'].?[['k'] == 'v1']"
A MapAccessor
仅适用于不包含句点的地图键。