python的json中方法及jsonpath模块用法分析

Python的JSON中方法及JSONPath模块用法分析

什么是JSON

JSON全称JavaScript Object Notation,是一种轻量级的数据交换格式。其特点是易于理解、易于编写、易于解析,同时也易于机器生成和解析。在Web应用程序中,JSON数据格式使用非常广泛,被用于前后端数据交互。

Python处理JSON数据的方法

Python标准库中内置了处理JSON数据的模块——json。这个模块提供了四个操作JSON数据的函数:

json.dumps()

将Python数据类型转换为JSON格式的字符串。

import json

data = {"name":"Jack", "age": 18}
json_str = json.dumps(data)
print(json_str)
# 输出:{"name": "Jack", "age": 18}

json.loads()

将JSON格式的字符串转换为Python数据类型。

import json

json_str = '{"name": "Jack", "age": 18}'
data = json.loads(json_str)
print(data)
# 输出:{'name': 'Jack', 'age': 18}

json.dump()

将Python数据类型以JSON格式写入文件。

import json

data = {"name":"Jack", "age": 18}
with open("data.json", "w") as f:
    json.dump(data, f)

json.load()

将JSON格式的文件读取为Python数据类型。

import json

with open("data.json", "r") as f:
    data = json.load(f)
print(data)
# 输出:{'name': 'Jack', 'age': 18}

JSONPath模块

JSONPath是一种类似于XPath的语言,被用来从JSON结构中提取数据。JSONPath模块提供了JSONPath的实现。

安装JSONPath模块

可以通过pip安装JSONPath模块。

pip install jsonpath

JSONPath表达式

JSONPath表达式的格式如下:

$.[key|index|keyname]...

其中$表示根节点,[key|index|keyname]表示要访问的节点,可以通过key、index、keyname来指定。例如:

import jsonpath

data = {
    "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
            }
        ],
        "bicycle": {
            "color": "red",
            "price": 19.95
        }
    }
}

# 访问根节点,即整个JSON数据
result = jsonpath.jsonpath(data, "$")
# 输出:[{'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}], 'bicycle': {'color': 'red', 'price': 19.95}}}]

# 访问store节点下的book节点下的第一个元素
result = jsonpath.jsonpath(data, "$.store.book[0]")
# 输出:[{'category': 'reference', 'author': 'Nigel Rees', 'title': 'Sayings of the Century', 'price': 8.95}]

# 访问store节点下的所有book节点下的作者(author)字段
result = jsonpath.jsonpath(data, "$.store.book[*].author")
# 输出:['Nigel Rees', 'Evelyn Waugh']

# 访问store节点下的所有节点
result = jsonpath.jsonpath(data, "$.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}], 'bicycle': {'color': 'red', 'price': 19.95}}]

# 访问store节点下的所有节点的值
result = jsonpath.jsonpath(data, "$.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}], 'bicycle': {'color': 'red', 'price': 19.95}}, [{'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': 'reference', 'author': 'Nigel Rees', 'title': 'Sayings of the Century', 'price': 8.95}, {'category': 'fiction', 'author': 'Evelyn Waugh', 'title': 'Sword of Honour', 'price': 12.99}, {'color': 'red', 'price': 19.95}, 'red', 19.95]

示例

假设有一份JSON格式的数据如下:

{
    "name": "张三",
    "age": 20,
    "hobbies": [
        "读书",
        "旅游",
        "游戏"
    ],
    "address": {
        "province": "广东",
        "city": "深圳",
        "detail": "XX街道XX号"
    },
    "school": [
        {
            "name": "清华大学",
            "major": "计算机科学与技术",
            "degree": "本科"
        },
        {
            "name": "麻省理工学院",
            "major": "电子工程",
            "degree": "硕士"
        }
    ]
}

例1:将JSON格式的数据转换为Python数据类型,并输出姓名和爱好

import json

with open("data.json", "r") as f:
    data = json.load(f)

print("姓名:", data["name"])
print("爱好:")
for hobby in data["hobbies"]:
    print(hobby)

输出结果为:

姓名: 张三
爱好:
读书
旅游
游戏

例2:使用JSONPath提取数据

import json
import jsonpath

with open("data.json", "r") as f:
    data = json.load(f)

# 输出年龄和详细地址
age = jsonpath.jsonpath(data, "$.age")[0]
province = jsonpath.jsonpath(data, "$.address.province")[0]
city = jsonpath.jsonpath(data, "$.address.city")[0]
detail = jsonpath.jsonpath(data, "$.address.detail")[0]

print("年龄:", age)
print("详细地址:", province + city + detail)

# 输出学校名称和专业
schools = jsonpath.jsonpath(data, "$.school[*]")
for school in schools:
    print("学校名称:", school["name"])
    print("专业:", school["major"])
    print()

输出结果为:

年龄: 20
详细地址: 广东深圳XX街道XX号
学校名称: 清华大学
专业: 计算机科学与技术

学校名称: 麻省理工学院
专业: 电子工程

通过以上两个示例我们可以看到,Python的json模块简单易用,使用jsonpath提取JSON数据更加方便快捷。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:python的json中方法及jsonpath模块用法分析 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • 支持10W高并发请求的IIS Web服务器常用设置 支持高并发的IIS Web服务器常用设置 Bad Request – Request Too Long 迁入阿里云后遇到的Request.UserHostAddress记录IP地址问题 云计算之路-阿里云上:从ASP.NET线程角度对“黑色30秒”问题的全新分析 超出TCP连接端口数限制(MaxUserPort)引起的服务器问题

      适用的IIS版本:IIS 7.0, IIS 7.5, IIS 8.0 适用的Windows版本:Windows Server 2008, Windows Server 2008 R2, Windows Server 2012 1、应用程序池(Application Pool)的设置:  General->Queue Length设置为65535(队…

    云计算 2023年4月11日
    00
  • 元芳,云主机选择,你怎么看?

    元芳,云主机选择,你怎么看? 为什么需要云主机? 云计算技术的出现,让用户可以通过网络连接远程使用硬件、软件和数据存储等计算资源。其中云主机,是一种无需购买实体硬件的云计算服务产品。相比于自行购买、维护和运维物理服务器,云主机的灵活性、成本和可扩展性都更加优异。因此,许多企业和个人在建立网站、构建应用程序以及存储数据时,越来越多地选择使用云主机。 云主机选择…

    云计算 2023年5月17日
    00
  • 3.21学习笔记–云计算入门二

    SDN(网络虚拟化):用软件定义网络,分离网络控制部分和封包传送部分,前者由SDN网络控制器承担,存储了全局的网络拓扑图,使数据传送的路径是最优的, 负载均衡:负载即任务,实现将许多互不相关的小型任务或中型任务合理分配到一台或多台的服务器上。由负载均衡器完成,纯软件均衡器有:LVS,硬件也有。直接采用DNS轮询和iptables也可以实现简单的均衡任务 集群…

    云计算 2023年4月13日
    00
  • 解决pytorch load huge dataset(大数据加载)

    解决 PyTorch 加载大数据集的问题,主要涉及下面两个方面: 加载器的设计和优化。如何让 PyTorch 加载器更高效地从硬盘读取数据,如何使用多线程和预加载等技术,加速数据加载的效率。 内存管理和GPU显存管理。如何有效地管理系统内存和 GPU 显存,防止内存不足或显存不足等错误,同时又保证模型训练的稳定性和准确性。 下面是两个示例: 示例1:使用 P…

    云计算 2023年5月18日
    00
  • 利用Python自制网页并实现一键自动生成探索性数据分析报告

    为了完成“利用Python自制网页并实现一键自动生成探索性数据分析报告”的攻略,您需要遵循以下步骤: 步骤1:准备数据 首先,您需要获取需要分析的数据。它可以是任何数据集,例如CSV,Excel文件或数据库表。 步骤2:编写网页 接下来,您需要编写一个HTML页面来展示您的数据并包含表格和图形。您可以使用任何HTML编辑器,例如Sublime Text或VS…

    云计算 2023年5月18日
    00
  • 华为技术岗面试初面+综合面试经验总结

    华为技术岗面试初面+综合面试经验总结 1. 初面 1.1 简历介绍 在初面中,面试官会要求你介绍自己的简历。这时候,你需要简洁明了地介绍自己的教育背景、工作经历、项目经验等。同时,你需要重点突出自己的技能和优势,让面试官对你有一个初步的了解。 1.2 技术问题 在初面中,面试官会问一些基础的技术问题,例如数据结构、算法、操作系统、网络等。这些问题旨在考察你的…

    云计算 2023年5月16日
    00
  • [转]关于云计算的五种误解

    导读:下面这篇文章来自IBM developerWorks博客的一篇文章,这篇文章提出了在云计算方面容易出现的问题。以下是博文: 以下是和 IT 同行交流的时候发现的一些有关于云计算的误解,都是比较浅显但是容易误导人的误解。在这里把它们列出来并做一点点解释。相信对于一些朋友来说,这些问题已经是常识,但还是希望能帮到那些初入云计算领域还在摸索的朋友。欢迎大家探…

    云计算 2023年4月11日
    00
合作推广
合作推广
分享本页
返回顶部