邢台移动端网站建设,wordpress云储存,湖南省做网站那个企业便宜,网站建设与排名介绍 JsonPath是一种能够提取部分JSON文档属性、对象、数组的语法#xff0c;支持条件过滤、数学运算、字符串处理等功能。JsonPath与JSON文档就像 XPath 表达式与 XML 文档结合使用一样。
由于 JSON 结构通常是匿名的#xff0c;并不一定和XML一样具有“根成员对象”#…介绍 JsonPath是一种能够提取部分JSON文档属性、对象、数组的语法支持条件过滤、数学运算、字符串处理等功能。JsonPath与JSON文档就像 XPath 表达式与 XML 文档结合使用一样。
由于 JSON 结构通常是匿名的并不一定和XML一样具有“根成员对象”因此 JsonPath假定分配$给外层对象的抽象名称。JsonPath由用点分隔的表达式段(操作符)组成。 操作符可以是一个简单的词如 JSON 值名称、*也可以是括在方括号 [ ] 中的更复杂的构造。 括号段前的分隔点是可选的也可以省略。下面是几种JsonPath的提取JSON文档内容语法
JsonPath描述$.object.name返回object.name的内容。$.object[‘name’]返回object.name的内容。$.object.[‘name’]返回object.name的内容。$.object.history.length()返回object.history数组元素的个数。$[?(.name ‘Object’)].price.first()返回第一个名为’Object’的对象的价格字段。$[?(.price 10)].length()返回price大于10的对象个数。
Jayway JsonPath是Stefan Goessner JsonPath的Java实现是用于读取JSON文档的Java DSL。本文主要通过Jayway JsonPath来简单介绍JsonPath的使用语法通过真实报文案例来进行操作。
支持的操作符 操作符描述$查询的根节点对象表示一个json的数据可以是对象或数组当前节点对象*通配符获取所有节点..递归查找查找所有层次的属性值name按名称匹配对象属性。.name按照名称查找子节点[name,name,...]可用查找多个节点[number,number,...]按索引匹配数组元素可同时查找多个数组元素[start:end]按定义的范围匹配数组元素:
start- 要匹配的第一个索引包括。 如果未指定则匹配从头开始的所有数组元素。 如果为负数则指定从数组末尾开始的偏移量。 end- 要匹配的最后一个索引不包括。 如果未指定则匹配所有数组元素到最后。 如果为负数则指定从数组末尾开始的偏移量。 | | [?(expression)] | 过滤表达式可匹配对象/数组元素,表达式的结果必须为布尔值 |
可以通过在 JSONPath 中添加 ~ 后缀来提取匹配的元素名称。 它返回匹配对象的名称或匹配数组项的字符串格式的索引。
过滤操作符 操作符描述等于!不等于小于小于或等于大于大于或等于~匹配正则表达式 [?(.name ~ /foo.*?/i)]in包含 [?(.size in [‘S’, ‘M’])]nin不包含subsetof子集 [?(.sizes subsetof [‘S’, ‘M’, ‘L’])]anyof交集 [?(.sizes anyof [‘M’, ‘L’])]noneof不是交集 [?(.sizes noneof [‘M’, ‘L’])]size左侧数组或字符串的大小应与右侧匹配empty左侧数组或字符串应该为空
支持的函数 可以在JsonPath表达式执行后进行调用其输入值为表达式的结果。函数的输出看具体某个函数的含义。
函数描述返回值类型min()数值类型数组最小值Doublemax()数值类型数组最大值Doubleavg()数值类型数组平均值Doublestddev()数值类型数组标准差Doublelength()数组长度Integersum()数值类型数组求和Doublekeys()提取匹配的元素名称与~操作符功能一致SetEconcat(X)拼接与入参相同append(X)把元素添加到JsonPath输出的数组中与入参相同first()数组中的第一个元素数组中元素类型last()数组中的最后一个元素数组中元素类型index(X)提供索引为X的数组的元素如果X为负数则从后往前取数组中元素类型
用一个复杂的接单报文来演示 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]
}
操作结果
JsonPath结果$.extendMessage.clientName“广州网络科技有限公司”$.extendMessage[‘clientNo’]“testEBU516154”$.extendMessage{clientNo:testEBU516154,clientName:广州网络科技有限公司,spSoNo:test1976065878296,road:011}$.odOrderDetailList[0].productName“白医生中频针灸理疗仪家用医院医用多功能颈椎肩周炎腰肌劳损电疗经络激光低频按摩器同款中频激光综合治疗仪 2023新款”$.odOrderDetailList[-1].productName“测试SKU”$.odOrderDetailList.length()2$.tags[:][“a”, “b”, “c”, “d”, “e” ]$.tags[2:][“c”, “d”, “e” ]$.tags[:3][“a”, “b”, “c”]$.tags[1:4][“b”, “c”, “d”]$.tags[-2:][“d”, “e”]$.tags[:-3][“a”, “b”]$.tags[:-3].length()2$.odOrderDetailList[0,1].productName“白医生中频针灸理疗仪家用医院医用多功能颈椎肩周炎腰肌劳损电疗经络激光低频按摩器同款中频激光综合治疗仪 2023新款”, “测试SKU”$.odOrderDetailList[1].[productName,price]“测试SKU”, 200$…id0,1,2$.odOrderDetailList[?(.id 4 - 0.4 * 5)].productSku“ESG03JJ1”$.odOrderDetailList[?(.id 1$.extendInfo.templateInfo[?(!(.type 2))].code“TPABC”$.extendInfo.templateInfo[?((.type ! 2))].code“TPABC”$.odOrderDetailList[?(.price 190)].productName“测试SKU”$.odOrderDetailList[?(.id $.id)].productSku[“38fjjjj”,“ESG03JJ1”]$…[?(.productSku)][{id:1,productName:白医生中频针灸理疗仪家用医院医用多功能颈椎肩周炎腰肌劳损电疗经络激光低频按摩器同款中频激光综合治疗仪 2023新款,quantity:1,productSku:38fjjjj,price:189.6},{id:2,productName:测试SKU,quantity:3,productSku:ESG03JJ1,price:200}]$…tags.length()5$.odOrderDetailList[*].price.min()189.6$…price.max()200 作者京东物流 马红岩 来源京东云开发者社区 自猿其说 Tech 转载请注明来源