一、JsonPath语法概述
JsonPath是一种表示Json文档中特定部分的语法。它可以帮助用户通过类似于XPath的表达式来筛选和提取Json对象的数据。
JsonPath标准由一个或多个路径表达式组成。每个路径表达式从根节点开始,描述了以下内容:
- 查找Json文档中一个或多个节点
- 访问指定的Json节点的属性、数组和子对象
以下是一个例子:
{ "name": "John", "age": 30, "cars": [ { "name": "Ford", "models": ["Fiesta", "Focus", "Mustang"] }, { "name": "BMW", "models": ["320", "X3", "X5"] }, { "name": "Fiat", "models": ["500", "Panda"] } ] }
使用JsonPath可以选择如下内容:
- 所有“name”字段:$..name
- 所有“models”字段:$..models
- BWM的所有“models”字段:$..[?(@.name=='BMW')].models
二、Json语法
在JsonPath的路径表达式中,需要有一定的Json语法基础。JSON(JavaScript Object Notation,JavaScript对象表示法)是一种轻量级的数据交换格式,易于阅读和编写。
JSON的数据结构包括:
- 对象:由花括号包裹的键值对集合
- 数组:由方括号包裹的值的有序集合
- 值:字符串、数字、布尔值、null、另一个对象或数组
以下是一个JSON对象的例子:
{ "name":"John", "age":30, "city":"New York" }
三、JsonPath过滤器
JsonPath语法中能够通过方括号和一系列过滤器对Json中的值进行筛选。以下是一些常用的JsonPath过滤器:
- $:表示根节点
- /:表示选取根节点下的子节点
- *:匹配任何节点
- @:表示当前节点
- ..:向下递归匹配所有节点
- []:表示筛选的条件
以下是一个根据条件筛选的例子:
{ "store":{ "book":[ { "category":"reference", "author":"Nigel Rees", "title":"Sayings of the Century", "price":8.95 }, { "category":"fiction", "author":"Evelyn Waugh", "title":"Sword of Honour", "price":12.99 }, { "category":"fiction", "author":"Herman Melville", "title":"Moby Dick", "isbn":"0-553-21311-3", "price":8.99 }, { "category":"fiction", "author":"J. R. R. Tolkien", "title":"The Lord of the Rings", "isbn":"0-395-19395-8", "price":22.99 } ], "bicycle":{ "color":"red", "price":19.95 } } }
以下的JsonPath会返回category是fiction的book的title和price:
$.store.book[?(@.category == 'fiction')].['title', 'price']
四、JsonPath的用法
JsonPath的用法通常分成两种场景:
- JsonPath的查询:根据路径表达式查找指定数据,通常用于测试或数据分析。
- JsonPath的使用:对Json文档应用更新/删除操作,通常在RESTful API或其他Web服务开发中使用。
以下是一个使用JsonPath查询的Python脚本例子:
import json import requests from jsonpath_ng import parse url = 'https://jsonplaceholder.typicode.com/users' response = requests.get(url).text data = json.loads(response) for user in data: name = parse('$..name').find(user) email = parse('$..email').find(user) print(name[0].value, email[0].value)
五、Json parse方法
Json parse方法是一种将Json字符串转换为对象或数组的方法,通常在处理Web API响应数据时使用。
以下是一个在JavaScript中使用JSON.parse()方法的例子:
let jsonString = '{"name":"John","age":30,"city":"New York"}'; let obj = JSON.parse(jsonString); console.log(obj.name);
六、Python的Json用法
Python包含了一个内置的JSON模块,用于在Python中读写JSON数据。
以下是一个使用Python操作JSON的例子:
import json user = {'name': 'John', 'age': 30, 'city': 'New York'} json_string = json.dumps(user) print(json_string)
七、Json的语法规范
虽然JSON本身没有正式的语法规范,但很多编程语言,包括JavaScript和Python,都实现了自己的JSON解析器。
以下是一些JSON语法规则的概述:
- JSON对象使用花括号包裹,并由逗号分隔的键值对组成。
- 键必须是字符串,值可以是字符串、数字、布尔型、null、数组或另一个JSON对象。
- 键和字符串值必须由双引号包裹。
- JSON数组使用方括号包裹,并由逗号分隔的值组成。
- 值可以是字符串、数字、布尔型、null、数组或另一个JSON对象。
以下是一个JSON对象的例子:
{ "name":"John", "age":30, "city":"New York" }
八、总结
本文介绍了JsonPath语法及其相关知识。通过路径表达式,JsonPath可以快速筛选和提取Json文档中的数据,帮助用户在Web API和其他应用中处理JSON。