开发者社区> 问答> 正文

fastjson2 如何根据多级子节点进行过滤?

如何根据多级子节点进行过滤?

我向做到类似这个表达式的过滤,现在是不支持吗? $.transactions[?(@.transaction.message.accountKeys.indexOf('11111111111111111111111111111111')!=-1)]

原提问者GitHub用户pengten

展开
收起
后端老大 2023-04-21 11:10:04 182 0
2 条回答
写回答
取消 提交回答
  • JSONPath需要修改为

    $.transactions[?(@.transaction.message.accountKeys.contains('1a'))]

    https://github.com/alibaba/fastjson2/releases/tag/2.0.19 请用新版本

    原回答者GitHub用户wenshao

    2023-04-21 14:08:41
    赞同 展开评论 打赏
  • 随心分享,欢迎友善交流讨论:)

    在 Fastjson 中,可以使用 JSONPath 表达式来进行多级子节点过滤。与你提到的示例类似,可以使用以下 JSONPath 表达式来实现:

    $.transactions[?(@.transaction.message.accountKeys[?(@=='11111111111111111111111111111111')])] 这个表达式实际上是在 transactions 数组中查找含有 accountKeys 数组中元素为 "11111111111111111111111111111111" 的子节点。

    在使用 JSONPath 表达式时,需要注意以下几点:

    需要使用 com.alibaba.fastjson.JSONPath 类提供的 API 来解析 JSONPath 表达式。

    JSONPath 表达式中的特殊字符需要进行转义,例如 “$” 符号需要写成 “ $”,中括号 “[” 和 “]” 也需要进行转义。

    JSONPath 表达式中可以使用逻辑运算符(&&、||、==、!=、<、>等)以及一些系统函数(如 length、abs、floor等),以实现更复杂的过滤条件。

    需要注意的是,在使用 JSONPath 表达式时,需要确保表达式的正确性,并且不要在数据量较大的情况下频繁地使用 JSONPath 表达式,以避免对系统性能的影响。

    2023-04-21 11:16:43
    赞同 展开评论 打赏
问答地址:
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载