写点什么

Jayway JsonPath- 提取 JSON 文档内容的 Java DSL | 京东物流技术团队

  • 2023-11-27
    北京
  • 本文字数:1397 字

    阅读完需:约 5 分钟

Jayway JsonPath-提取JSON文档内容的Java DSL | 京东物流技术团队

介绍


JsonPath 是一种能够提取部分 JSON 文档属性、对象、数组的语法,支持条件过滤、数学运算、字符串处理等功能。JsonPath 与 JSON 文档就像 XPath 表达式与 XML 文档结合使用一样。


由于 JSON 结构通常是匿名的,并不一定和 XML 一样具有“根成员对象”,因此 JsonPath 假定分配 $给外层对象的抽象名称。JsonPath 由用点分隔的表达式段(操作符)组成。 操作符可以是一个简单的词,如 JSON 值名称、*,也可以是括在方括号 [ ] 中的更复杂的构造。 括号段前的分隔点是可选的,也可以省略。下面是几种 JsonPath 的提取 JSON 文档内容语法:



Jayway JsonPathStefan Goessner JsonPath的 Java 实现,是用于读取 JSON 文档的 Java DSL。本文主要通过 Jayway JsonPath 来简单介绍 JsonPath 的使用语法,通过真实报文案例来进行操作。

支持的操作符



可以通过在 JSONPath 中添加 ~ 后缀来提取匹配的元素名称。 它返回匹配对象的名称或匹配数组项的字符串格式的索引。

过滤操作符



支持的函数


可以在 JsonPath 表达式执行后进行调用,其输入值为表达式的结果。函数的输出看具体某个函数的含义。



用一个复杂的接单报文来演示


https://jsonpath.com,这个在线网站可以用来验证 JsonPath 表达式,但是不支持函数,函数可以通过java代码来验证。


String json ="{.....}";Object read = JsonPath.read(json, "$..price.min()");System.out.println(read);
复制代码

示例报文

{    "address":"大良街道同兴路****",    "createTime":"2023-09-20 17:48:44",    "customerName":"培^_^",    "id":0,    "memberId":"ECP002000*****",    "mobile":"184^_^8547",    "extendMessage":{        "clientNo":"testEBU516154",        "clientName":"广州网络科技有限公司",        "spSoNo":"test1976065878296",        "road":"011"    },    "odOrderDetailList":[        {            "id":1,            "productName":"白医生中频针灸理疗仪家用医院医用多功能颈椎肩周炎腰肌劳损电疗经络激光低频按摩器同款中频激光综合治疗仪 2023新款",            "quantity":1,            "productSku":"38fjjjj",            "price":189.6        },        {            "id":2,            "productName":"测试SKU",            "quantity":3,            "productSku":"ESG03JJ1",            "price":200        }    ],    "totalPrice":0,    "volume":17318.4,    "extendInfo":{        "templateInfo":[            {                "code":"TP123",                "isPrint":1,                "type":2,                "printType":0            },            {                "code":"TPABC",                "isPrint":1,                "type":4,                "printType":0            }        ],        "attrs":{            "plateFormCode":"274"        },        "senderName":"流苏",        "senderAddress":"广东省中山市南头镇永辉北路*****",        "paymentTime":"2023-09-20 17:22:31"    },    "carrierName":"京东配送",    "provinceName":"广东",    "isConsumable":0,    "merchantType":"0",    "tags":[        "a",        "b",        "c",        "d",        "e"    ]}
复制代码

操作结果



作者:京东物流 马红岩

来源:京东云开发者社区 自猿其说 Tech 转载请注明来

发布于: 1 小时前阅读数: 3
用户头像

拥抱技术,与开发者携手创造未来! 2018-11-20 加入

我们将持续为人工智能、大数据、云计算、物联网等相关领域的开发者,提供技术干货、行业技术内容、技术落地实践等文章内容。京东云开发者社区官方网站【https://developer.jdcloud.com/】,欢迎大家来玩

评论

发布
暂无评论
Jayway JsonPath-提取JSON文档内容的Java DSL | 京东物流技术团队_json_京东科技开发者_InfoQ写作社区