当前位置: 首页 > Web前端 > JavaScript

使用JSONPath解析JSON数据

时间:2023-03-27 16:06:23 JavaScript

本文由德广发表于代码之路-技术博客前端开发中,当接口返回复杂嵌套JSON时,获取固定层级的数据,需要使用链值//接口数据varobj={name:"历史",value:3,children:[{name:"明清",value:"3-1",count:10},{name:"现代",value:"3-2",count:20}]}//获取第二个子类型的值constval=obj.children[1].value//3-2当层次结构再次变长时,使用链valuecode冗长且容易出错。比如这里的数据层次有问题,比如children的长度只有1,就会遇到我们常见的错误:UncaughtTypeError:Cannotreadproperty'value'ofundefined。为了避免错误带来的问题,这里可以使用JSONPath来取值。JSONPath在认识JSONPath之前,先了解xPath。xPath是XML的路径语言。它使用路径标识通过层级结构定位文档元素,例如在HTML中定位元素:类似的,JSONPath通过路径检索JSON,支持运算符、函数、过滤器等,方便快速定位。上面的取值可以用JSONPath来描述为JSONPath('$.children[1].value',obj)operatorsymbol描述了$query的根节点对象,用来表示一个ison数据,可以是数组或一个object@filter过滤谓词处理的当前节点对象,类似于iava中的this字段*wildcard,代表一个名字或数字*递归搜索。子节点[''(,'')一个或多个子节点(,)]一个或多个数组下标[start:end]数组分片,区间为[start.end]),不包括end[?()]filter表达式的结果必须是布尔函数。该函数可以在路径的末尾调用。函数的输出是路径表达式的输出。符号说明输出min()获取数值类型数组的最小值Doublemax()获取数值类型数组的最大值ValueDoubleavg()获取数值数组的平均值Doublestddev()获取a的标准差数值数组Doublelength()获取数值数组的长度IntegerFilterFilter是用于过滤数组的逻辑表达式。运算符说明==等于,但是数字1不等于字符1!=不等于<小于<=小于等于>大于>=大于等于=~判断是否满足正则表达式,例如[?(@.value=~foo.*?/i)]in属于符号,如[?(@.sizein[s,M)]nin排除size长度为空判断为空参考:https://goessner.net/articles/JsonPath/