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日

相关文章

  • 当生命科学遇到云计算——IBM Bluemix医疗行业应用沙龙精彩回顾

    3月17日,“当生命科学遇到云计算——IBM Bluemix医疗行业应用”沙龙在上海建国宾馆成功举办。本次活动由IBM Bluemix主办、CSDN联合主办,汇集全球医疗、制药、基因、生命云、健康、生命科学、医院等领域的技术专家、学者、产业精英、投融资机构杰出代表,聚焦云计算在生命科学中的实践和应用创新,为与会各方奉上了精彩绝伦的技术盛宴。 物联网、移动互联…

    云计算 2023年4月13日
    00
  • Python解析json时提示“string indices must be integers”问题解决方法

    当我们使用Python解析json时,可能会遇到“string indices must be integers”错误,这通常是由于我们使用了非法的访问方式。以下是解决这个问题的完整攻略: 问题背景 在使用Python解析json过程中,代码如下: import json json_str = ‘{"name": "Alice&…

    云计算 2023年5月18日
    00
  • 基于Python实现股票数据分析的可视化

    让我来详细讲解“基于Python实现股票数据分析的可视化”的完整攻略: 1. 确定需求和准备工作 首先,我们需要明确项目的目的和需求: 目的:实现对股票数据的分析和可视化展示。 需求:获取股票数据、进行数据清洗和处理、分析股票趋势、绘制股票K线图、展示分析结果。 在明确项目需求之后,我们需要进行相关的准备工作: 安装Python和相关库:Python是实现该…

    云计算 2023年5月18日
    00
  • 跟老齐学Python之大话题小函数(2)

    首先感谢你对网站的关注,下面为您详细介绍“跟老齐学Python之大话题小函数(2)”的完整攻略。 一、文章主要内容 本文主要介绍Python中的函数,包括函数的定义、调用、参数传递和返回值等内容。涵盖了常规函数、匿名函数、高阶函数等多个方面。 二、常规函数 函数是Python中的一种重要的抽象机制。通过函数,我们可以将代码进行分装和分层,提高代码的重用和可维…

    云计算 2023年5月18日
    00
  • sharepoint jquery 通过jQuery控制SharePoint展现——计算栏KPI和标签云

    ====================SharePoint 2010应用开发系列–把JQuery框架集成到SharePoint中======================= Query是我们在做SharePoint 2010开发的时候使用的比较频繁的JS类库。本文向大家介绍一种简单方便的方式,把JQuery框架集成到我们的SharePoint中。我们来…

    云计算 2023年4月11日
    00
  • ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程解析

    下面是关于“ASP.NET Core 5.0中的Host.CreateDefaultBuilder执行过程解析”的完整攻略,包含两个示例说明。 简介 在ASP.NET Core 5.0中,我们可以使用Host.CreateDefaultBuilder方法来创建主机。本文将详细讲解Host.CreateDefaultBuilder方法的执行过程,并以两个示例说…

    云计算 2023年5月16日
    00
  • Crane如何做到利用率提升3倍稳定性还不受损?

    作为云平台用户,我们都希望购买的服务器物尽其用,能够达到最大利用率。然而要达到理论上的节点负载目标是很的,计算节点总是存在一些装箱碎片和低负载导致的闲置资源。下图展示了某个生产系统的CPU资源现状,从图中可以看出,浪费主要来自以下几个方面: 业务需求与节点可调度资源很难完全匹配,因此在每个节点上都可能剩余一些碎片资源无法被分配出去。 业务通常为了绝对稳定,会…

    2023年4月10日
    00
  • linux云计算(keystone swift cinder配置)

    独立安装openstack组件 准备服务器,为安装openstack的服务器加3块额外硬盘 qemu-img create -f qcow2 rh71.img 20G qemu-img create -f qcow2 rh71.img 20G qemu-img create -f qcow2 rh71.img 20G keystone介绍 keystone是…

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