一、Jsonpath取值
取值是Jsonpath中最基本的操作,它能快速准确地获取需要的数据。Jsonpath取值的基本语法格式如下:
$.[key1,key2,...,keyn]
其中,$表示根节点,在括号中指定需要获取的key,如[key1,key2,...,keyn]。下面是一个示例:
{ "person": { "name": "张三", "age": 30, "address": { "city": "北京", "street": "朝阳区" }, "phone": [ { "type": "home", "number": "010-xxxx" }, { "type": "work", "number": "020-xxxx" } ] } }
取值示例:
$.person.name // 输出:"张三" $.person.age // 输出:30 $.person.address.city // 输出:"北京" $.person.phone[0].number // 输出: "010-xxxx"
二、怎么下载JSONPath库
要使用Jsonpath,需要引入Jsonpath库。可以通过以下方式安装:
npm install jsonpath
也可以直接下载Jsonpath的js文件,然后在HTML中引用:
<script src="jsonpath.js"></script>
三、JSONPath解析JSON
Jsonpath最常见的应用是解析JSON。Jsonpath提供了一种简洁明了的方式,让我们能够轻松地从JSON中取出需要的数据。下面是一个示例:
{ "store": { "book": [ { "title": "JavaScript权威指南", "author": "Flanagan", "year": 2006, "price": 49.99 }, { "title": "Java核心技术卷I", "author": "Cay Horstmann", "year": 2015, "price": 59.99 }, { "title": "Python基础教程", "author": "Magnus Lie Hetland", "year": 2008, "price": 39.95 } ], "bicycle": { "color": "red", "price": 19.95 } } }
取出所有书籍的作者:
$.store.book[*].author
输出:
[ "Flanagan", "Cay Horstmann", "Magnus Lie Hetland" ]
取出所有书籍的价格:
$.store.book[*].price
输出:
[ 49.99, 59.99, 39.95 ]
四、生成JSONPath
生成Jsonpath有时可以帮助我们更好地理解它的取值规则。下面是一些示例:
// 取出所有书籍的作者 $.store.book[*].author // 取出第一本书的作者 $.store.book[0].author // 取出前两本书的作者 $.store.book[:2].author // 取出最后一本书的作者 $.store.book[-1:].author // 取出价格大于50的书的作者 $.store.book[?(@.price > 50)].author
五、JSONPath逻辑运算
Jsonpath还支持逻辑运算,如“与”、“或”、“非”等。下面是一些示例:
如果我们要取出所有价格大于50且年份大于2000的书的作者:
$.store.book[?(@.price > 50 && @.year > 2000)].author
如果我们要取出价格大于50或年份大于2000的书的作者:
$.store.book[?(@.price > 50 || @.year > 2000)].author
如果我们要取出价格不等于50的书的作者:
$.store.book[?(@.price != 50)].author
六、JSONPath set
Jsonpath还支持set操作,用于更新JSON数据。set操作的语法格式如下:
$.[key1,key2,...,keyn] = value
其中,$表示根节点,在括号中指定需要更新的key,如[key1,key2,...,keyn]。value是需要更新的值。下面是一个示例:
{ "person": { "name": "张三", "age": 30, "address": { "city": "北京", "street": "朝阳区" }, "phone": [ { "type": "home", "number": "010-xxxx" }, { "type": "work", "number": "020-xxxx" } ] } }
假设我们要将张三的年龄修改为32岁,可以使用如下Jsonpath:
$.person.age = 32
修改后的结果如下:
{ "person": { "name": "张三", "age": 32, "address": { "city": "北京", "street": "朝阳区" }, "phone": [ { "type": "home", "number": "010-xxxx" }, { "type": "work", "number": "020-xxxx" } ] } }
七、怎么导入JSONPath库
在Node.js中,可以通过require的方式导入Jsonpath库,在代码中使用:
const jsonpath = require('jsonpath');
在浏览器中,可以通过script标签引入Jsonpath库,然后使用全局变量JsonPath:
<script src="jsonpath.js"></script> // 使用全局变量JsonPath JsonPath.query(data, "$.store.book[*].author");
八、JSON Parse方法选取
除了Jsonpath之外,还有其他选取JSON数据的方法。下面给出一些示例:
方法一:使用JSON.parse方法解析JSON数据,然后使用点号和中括号来取值。
const data = '{"person": {"name": "张三", "age": 30}}'; const obj = JSON.parse(data); console.log(obj.person.name); // 输出:"张三" console.log(obj['person']['age']); // 输出:30
方法二:使用Lodash库的get方法取值。
const data = '{"person": {"name": "张三", "age": 30}}'; const obj = JSON.parse(data); console.log(_.get(obj, 'person.name')); // 输出:"张三"
方法三:使用Axios库发起网络请求获取JSON数据,然后使用点号和中括号来取值。
axios.get('/api/data').then(res => { console.log(res.data.person.name); // 输出:"张三" console.log(res.data['person']['age']); // 输出:30 })