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"
该写法存在两个关键问题:
- 语法错误:in 不是 Josson 支持的操作符,会引发解析异常或误判节点关系;
- 路径逻辑错误:$.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-databind2.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系统提升应用速度的策略与技巧


