本帖最后由 gys497 于 2024-6-9 13:14 编辑
前言
最近在一个项目中需要处理一些比较复杂的Json结构,需要一层一层的遍历判断,代码量非常的庞大,想着使用Jsonpaht来进行快速定位路径,发现易语言并没有相关的支持,论坛上也没人讨论过,便自己利用JS实现了在易语言使用JsonPaht,代码瞬间简洁了不少,舒服~~~
现将代码发出来供大家使用,非常简单,就是一个调用JS的函数
源码以成品模块:
Jsonpaht.rar
(8.22 KB, 下载次数: 52)
JsonPaht语句在线验证工具:https://www.jsonpath.cn/
JsonPath使用场景
在遇到数据较大的Json数据或比较复杂的Json结构时,通常我们往往需要进行层级的遍历,非常的麻烦与臃肿,这个时候JsonPaht就能帮助你快速的定位路径或读取值
JsonPath的来源看它的名字你就能知道,这家伙和JSON文档有关系,正如XPath之于XML文档一样,JsonPath为Json文档提供了解析能力,通过使用JsonPath,你可以方便的查找节点、获取想要的数据,JsonPath是Json版的XPath。 JsonPath语法JsonPath的语法相对简单,它采用开发语言友好的表达式形式,如果你了解类C语言,对JsonPath就不会感到不适应。 JsonPath语法要点: - $ 表示文档的根元素
- @ 表示文档的当前元素
- .node_name 或 ['node_name'] 匹配下级节点
- [index] 检索数组中的元素
- [start:end:step] 支持数组切片语法
- * 作为通配符,匹配所有成员
- .. 子递归通配符,匹配成员的所有子元素
- (<expr>) 使用表达式
- ?(<boolean expr>)进行数据筛选
下表将列举所有支持的语法,并对XPath进行比较: [td]XPath | JsonPath | 说明 | / | $ | 文档根元素 | . | @ | 当前元素 | / | .或[] | 匹配下级元素 | .. | N/A | 匹配上级元素,JsonPath不支持此操作符 | // | .. | 递归匹配所有子元素 | * | * | 通配符,匹配下级元素 | @ | N/A | 匹配属性,JsonPath不支持此操作符 | [] | [] | 下标运算符,根据索引获取元素,XPath索引从1开始,JsonPath索引从0开始 | ` | ` | [,] | N/A | [start:end:step] | 数据切片操作,XPath不支持 | [] | ?() | 过滤表达式 | N/A | () | 脚本表达式,使用底层脚本引擎,XPath不支持 | () | N/A | 分组,JsonPath不支持 |
注意: - JsonPath的索引从0开始计数
- JsonPath中字符串使用单引号表示,例如:$.store.book[?(@.category=='reference')]中的'reference'
过滤器运算符过滤器是用于筛选数组的逻辑表达式。一个典型的过滤器将是[?(@.age > 18)],其中@表示正在处理的当前项目。 可以使用逻辑运算符&&和||创建更复杂的过滤器。 字符串文字必须用单引号或双引号括起来([?(@.color == 'blue')] 或者 [?(@.color == "blue")]). [td]操作符 | 描述 | == | left等于right(注意1不等于'1') | != | 不等于 | < | 小于 | <= | 小于等于 | > | 大于 | >= | 大于等于 | =~ | 匹配正则表达式[?(@.name =~ /foo.*?/i)] | in | 左边存在于右边 [?(@.size in ['S', 'M'])] | nin | 左边不存在于右边 | size | (数组或字符串)长度 | empty | (数组或字符串)为空 |
|