JSON(JavaScript Object Notation)是一种广泛使用的数据交换格式。它提供了一种轻量且易于阅读的方式来表示结构化数据。在处理JSON数据时,高效提取特定信息变得至关重要。JSONPath是用于JSON的查询语言,允许您浏览和从复杂的JSON结构中提取数据。 

01 JSONPath简介 

JSONPath对JSON的作用类似于XPath对XML的作用。它提供了一种简洁而灵活的语法,用于浏览JSON文档并检索所需的数据。

基本语法

JSONPath表达式类似于XPath表达式。它们以美元符号($)开头,表示JSON文档的根。

以下是一些基本的JSONPath表达式: 

  • $.store.book[*] 

  • $.store.book[0].title 

  • $.store.* 

关键概念 

点符号表示法 

点符号表示法用于访问对象的属性。例如,$.store.book访问“store”对象内的“book”属性。 

通配符 

  • * [*] 

数组索引 

  • [n] 

递归下降 

  • .. 

示例

让我们考虑一个表示书店的JSON文档:

{

 "store": {

   "book": [

     {

      "title": "The Hitchhiker's Guide to the Galaxy",

      "author": "Douglas Adams"

     },

     {

     "title": "1984",

     "author": "GeorgeOrwell"

     }

   ],

    "location": "NewYork"

  }

}
  • 获取所有书籍标题:

    $.store.book[*].title 

  • 获取位置:

    $.store.location 

  • 使用递归下降获取所有作者:

    $.store..author 

02 工具和库

有许多工具和库支持JSONPath,使得以编程方式处理JSON数据更加轻松。这些工具包括在线评估器、编程语言库(例如JavaScript、Python)以及API测试框架中的集成工具。JSONPath在许多领域都有广泛的应用,特别是在处理RESTful API响应、配置文件和日志数据时。

以下是一些JSONPath的实际应用场景: 

API测试

在进行API测试时,常常需要从API响应中提取特定的数据进行验证。JSONPath可以帮助测试人员轻松地指定路径,从API响应中提取关键信息,以确保API的正确性和一致性。

// 示例API响应

{

  "user": {

    "id": 123,

    "username": "john_doe",

    "email": "john.doe@example.com"

  }

}

使用JSONPath可以轻松提取用户的用户名:$.user.username。 

配置文件解析

许多应用程序和服务使用JSON格式的配置文件。通过使用JSONPath,开发人员可以在配置文件中快速导航,获取必要的配置信息,以适应不同的环境和需求。

// 示例配置文件

{

  "database": {

    "host": "localhost",

    "port": 5432,

    "username": "admin",

    "password": "secret"

  }

}

通过JSONPath可以轻松获取数据库主机地址:$.database.host。

数据日志分析 

在处理大量日志数据时,JSONPath可以帮助分析人员快速定位和提取关键信息。例如,在应用程序的日志文件中,使用JSONPath可以过滤和提取特定操作或错误的相关信息。

// 示例日志数据

{

  "timestamp": "2023-11-24T14:30:00",

  "level": "ERROR",

  "message": "Database connection failed",

  "data": {

    "error_code": 500,

    "details": "Connection timeout"

  }

}

通过JSONPath可以轻松提取错误消息:$.message。

数据转换与重构

有时候,需要将一个JSON结构转换为另一种形式,或者重新组织JSON数据以满足不同系统的需求。JSONPath可以用于选择和提取源数据中的特定部分,并将其映射到目标结构

// 示例源数据

{

  "person": {

    "name": "Alice",

    "age": 30,

    "address": {

       "city": "Wonderland",

       "country": "Fantasia"

    }

  }

}

通过JSONPath可以轻松提取并重构成目标结构:{ "full_name": $.person.name, "location": $.person.address.city }。 

封装 JSONPath 

封装 JSONPath 意味着创建一个可重用的代码库或类,以便更轻松地在项目中使用 JSONPath 表达式。在许多编程语言中,都有现成的 JSONPath 库,例如,Python 中的 jsonpath_rw 库、Java 中的 Jayway JsonPath 等。

这里以 Python 为例,假设你想要封装 JSONPath 功能,可以创建一个简单的 Python 类来处理 JSONPath 表达式的解析和数据提取。

import jsonpath_ng



class JSONPathExtractor:

   def __init__(self, json_data):

     self.json_data = json_data

 

def extract(self, jsonpath_expr):

   jsonpath_expr = jsonpath_ng.parse(jsonpath_expr)

   matches = jsonpath_expr.find(self.json_data)

   return[match.value for match in matches]

 

 # 示例用法

 json_data = {

   "user": {

     "id": 123,

     "username": "john_doe",


   }

 }

 

 jsonpath_extractor = JSONPathExtractor(json_data)

 

 # 提取用户名

  username = jsonpath_extractor.extract("$.user.username")

  print("Username:", username)

 

 # 提取用户ID

  user_id = jsonpath_extractor.extract("$.user.id")

print("User ID:", user_id)

在这个简单的例子中,JSONPathExtractor 类接受一个 JSON 数据对象,并提供一个 extract 方法,该方法接受 JSONPath 表达式并返回匹配的结果。

行动吧,在路上总比一直观望的要好,未来的你肯定会感谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入群: 786229024,里面有各种测试开发资料和技术可以一起交流哦。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】在这里插入图片描述
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

GitHub 加速计划 / js / json
41.72 K
6.61 K
下载
适用于现代 C++ 的 JSON。
最近提交(Master分支:16 天前 )
960b763e 3 个月前
8c391e04 5 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐