Filter with IN Clause in Josson Library

发布时间 - 2026-01-30 00:00:00    点击率:

本文详解如何在 josson 库中正确使用类似 sql `in` 的过滤逻辑(实际通过 `contains()` 实现),解决因表达式误写和 jackson 版本冲突导致的 `nosuchmethoderror` 问题,并提供可运行的 java 示例与关键注意事项。

Josson 是一个轻量级、基于 Jackson 的 JSON 查询与转换库,支持类 XPath/JSONPath 的表达式语法。但需注意:Josson 并不原生支持 x in (y) 这类 SQL 风格语法;其等效逻辑应使用 array.contains(value) 方法——即判断某值是否存在于目标数组中。

在你的原始表达式中:

"filter": "data[$.sourceData.series in (motorSeries)].CSDtemplateName"

该写法存在两个关键问题:

  1. 语法错误:in 不是 Josson 支持的操作符,会引发解析异常或误判节点关系;
  2. 路径逻辑错误:$.sourceData.series.in(motorSeries) 被解析为尝试在 sourceData.series 节点下查找名为 in 的子字段,而 motorSeries 并非其子节点,导致语义错乱。

✅ 正确写法应为:

"filter": "data[motorSeries.contains($.sourceData.series)].CSDtemplateName"

此表达式含义清晰:遍历 data 数组,对每个元素检查其 motorSeries 字段(必须是 JSON 数组)是否包含 $.sourceData.series 的值,若匹配则提取 CSDtemplateName。

以下是完整、可直接运行的 Java 示例(已适配 Josson 1.5+ 与 Jackson 2.14+):

import com.octomix.josson.Josson;

public class JossonInFilterExample {
    public static void main(String[] args) {
        String json = """
            {
              "data": [
                {
                  "motorSeries": ["UMT O (S)", "LX PLUS (S)", "XUMA DX (S)", "UMAI 100", "UMA (ULTIMA)"],
                  "CSDtemplateName": "ABC"
                },
                {
                  "motorSeries": ["A", "B"],
                  "CSDtemplateName": "XYZ"
                }
              ],
              "sourceData": {
                "series": "LX PLUS (S)"
              },
              "filter": "data[motorSeries.contains($.sourceData.series)].CSDtemplateName"
            }
            """;

        Josson josson = Josson.fromJsonString(json);
        Object result = josson.getNode("eval(filter)");

        System.out.println(result); // 输出: "ABC"
    }
}

⚠️ 重要注意事项

  • Jackson 版本兼容性:Josson ≥1.5 依赖 Jackson Databind 2.14.1+。若项目中已引入旧版 Jackson(如 2.9.x 或 2.12.x),需显式升级至 2.14.1 或更高版本,否则将抛出 NoSuchMethodError: JsonNode.isEmpty()(因 isEmpty() 方法在 2.14+ 中才被添加)。Maven 依赖示例:

    
        com.fasterxml.jackson.core
        jackson-databind
        2.14.3
    
    
        com.octomix.josson
       

    josson 1.5.0
  • 数据类型严格性:motorSeries 必须是 JSON 数组(JsonArray),不能是字符串或 null;$.sourceData.series 必须为字符串(JsonString),否则 contains() 比较可能返回 false 或抛出 ClassCastException。建议在生产环境做前置校验。

  • 空值安全:若 motorSeries 可能为 null,可改用安全调用形式:

    data[motorSeries != null && motorSeries.contains($.sourceData.series)].CSDtemplateName

总结:Josson 中实现“IN”语义的核心是 array.contains(value),而非模仿 SQL 的 in 关键字;同时务必确保 Jackson 版本与 Josson 兼容。掌握这一模式后,即可高效完成复杂嵌套 JSON 的条件筛选任务。


# java  # js  # json  # node  # ai  # sql  # maven  # 数据类型  # Array  # NULL  # Filter  # 字符串  # 抛出  # 是一个  # 这一  # 遍历  # 这类  # 可直接  # 而非  # 能为  # 是否存在  # 则将 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何用花生壳三步快速搭建专属网站?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  Laravel如何实现用户角色和权限系统_Laravel角色权限管理机制  夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化  七夕网站制作视频,七夕大促活动怎么报名?  jQuery中的100个技巧汇总  如何在万网主机上快速搭建网站?  Laravel怎么实现模型属性的自动加密  php静态变量怎么调试_php静态变量作用域调试技巧【解答】  Laravel如何使用Livewire构建动态组件?(入门代码)  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  Angular 表单中正确绑定输入值以确保提交与验证正常工作  香港服务器租用每月最低只需15元?  BootStrap整体框架之基础布局组件  微信h5制作网站有哪些,免费微信H5页面制作工具?  Windows驱动无法加载错误解决方法_驱动签名验证失败处理步骤  如何在阿里云购买域名并搭建网站?  Laravel安装步骤详细教程_Laravel环境搭建指南  如何快速搭建虚拟主机网站?新手必看指南  如何快速搭建个人网站并优化SEO?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  怎样使用JSON进行数据交换_它有什么限制  Python高阶函数应用_函数作为参数说明【指导】  laravel怎么配置Redis作为缓存驱动_laravel Redis缓存配置教程  香港服务器网站生成指南:免费资源整合与高速稳定配置方案  邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?  制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?  如何用IIS7快速搭建并优化网站站点?  Laravel怎么防止CSRF攻击_Laravel CSRF保护中间件原理与实践  如何在万网自助建站平台快速创建网站?  如何快速搭建高效香港服务器网站?  Android自定义控件实现温度旋转按钮效果  JavaScript如何实现错误处理_try...catch如何捕获异常?  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  Laravel如何使用Facades(门面)及其工作原理_Laravel门面模式与底层机制  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  PHP的CURL方法curl_setopt()函数案例介绍(抓取网页,POST数据)  如何快速搭建安全的FTP站点?  Laravel如何实现API资源集合?(Resource Collection教程)  高端云建站费用究竟需要多少预算?  千问怎样用提示词获取健康建议_千问健康类提示词注意事项【指南】  如何在香港服务器上快速搭建免备案网站?  如何在宝塔面板中修改默认建站目录?  专业商城网站制作公司有哪些,pi商城官网是哪个?  laravel怎么用DB facade执行原生SQL查询_laravel DB facade原生SQL执行方法  Laravel怎么实现验证码(Captcha)功能  郑州企业网站制作公司,郑州招聘网站有哪些?  如何撰写建站申请书?关键要点有哪些?  Laravel怎么做缓存_Laravel Cache系统提升应用速度的策略与技巧