您的位置:

详解JsonPath语法

一、JsonPath语法概述

JsonPath是一种表示Json文档中特定部分的语法。它可以帮助用户通过类似于XPath的表达式来筛选和提取Json对象的数据。

JsonPath标准由一个或多个路径表达式组成。每个路径表达式从根节点开始,描述了以下内容:

  1. 查找Json文档中一个或多个节点
  2. 访问指定的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。