Python语言入门到精通--Python中JSON结构数据的高效增删改操作
小职 2021-09-10 来源 :Python大数据分析 阅读 356 评论 0

摘要:本文主要介绍了Python语言入门到精通--Python中JSON结构数据的高效增删改操作,通过具体的内容展现,希望对大家Python开发的学习有所帮助。

本文主要介绍了Python语言入门到精通--Python中JSON结构数据的高效增删改操作,通过具体的内容展现,希望对大家Python开发的学习有所帮助。

Python语言入门到精通--Python中JSON结构数据的高效增删改操作


 1 简介

在上一期文章中我们一起学习了在Python中如何使用jsonpath库,对JSON格式数据结构进行常规的节点条件查询,可以满足日常许多的数据处理需求。

  

而在上一期结尾处,我提到了还有其他JSONPath功能相关的进阶Python库,在今天的文章中,我就将带大家学习更加高级的JSON数据处理方式。

  

2 基于jsonpath-ng的进阶JSON数据处理方法

jsonpath-ng是一个功能强大的Python库,它整合了jsonpath-rw、jsonpath-rw-ext等第三方JSONPath拓展库的实用功能,使得我们可以基于JSONPath语法,实现更多操纵JSON数据的功能,而不只是查询数据而已,使用pip install jsonpath-ng进行安装:

 

2.1 JSON数据的增删改

jsonpath-ng中设计了一些方法,可以帮助我们实现对现有JSON数据的增删改操作,首先我们来学习jsonpath-ng中如何定义JSONPath模式,并将其运用到对数据的匹配上,依然以上篇文章的数据为例:

 

import json

from jsonpath_ng import parse

 

# 读入示例json数据

with open('json示例.json', encoding='utf-8') as j:

    demo_json = json.loads(j.read())

     

# 构造指定JSONPath模式对应的解析器

parser = parse('$..paths..steps[*].duration')

 

# 利用解析器的find方法找到目标数据中所有满足条件的节点

matches = parser.find(demo_json)

 

# 利用value属性取得对应匹配结果的值

matches[0].value

 

 Python语言入门到精通--Python中JSON结构数据的高效增删改操作

而基于上面产生的一些对象我们就可以实现对JSON数据的增删改:

 

2.1.1 对JSON数据进行增操作

在jsonpath-ng中对JSON数据添加节点,思想是先构造对「原先不存在」的节点进行匹配的解析器对象,利用find_or_create方法处理原始JSON数据:

 

# 构造示例数据

demo_json = {

    'level1': [

        {

            'level2': {}

        },

        {

            'level2': {

                'level3': 12

            }

        }

    ]

}

 

# 构造规则解释器,所有除去最后一层节点规则外可以匹配到的节点

# 都属于合法匹配结果,会在匹配结果列表中出现

parser = parse('level1[*].level2.level3')

 

matches = parser.find_or_create(demo_json)

 

demo_json

在find_or_create操作之后,demo_json就被修改成下面的结果:

 Python语言入门到精通--Python中JSON结构数据的高效增删改操作

 

 

接下来的事情就很简单了,只需要在matches结果中进行遍历,遇到value属性为{}的,就运用full_path.update_or_create()方法对原始JSON数据进行更新即可,比如这里我们填充999:

 

for match in matches:

    if match.value == {}:

        # 更新原始输入的JSON数据

        match.full_path.update_or_create(demo_json, 999)

 

demo_json

 

 Python语言入门到精通--Python中JSON结构数据的高效增删改操作

2.1.2 对JSON数据进行删操作

当我们希望对JSON数据中指定JSONPath规则的节点予以删除时,可以使用到parse对象的filter()方法传入lambda函数,在lambda函数中进行条件判断,返回的即为删除指定节点之后的输入数据。

 

以上一步「增」操作后得到的demo_json为例,我们来对其level1[*].level2.level3值为999的予以过滤:

 

parser = parse('level1[*].level2.level3')

 

# 过滤 level1[*].level2.level3 规则下值为 999 的节点

parser.filter(lambda x: x == 999, demo_json)

demo_json

可以看到结果正是我们所预期的:

 

 Python语言入门到精通--Python中JSON结构数据的高效增删改操作

 

2.1.3 对JSON数据进行改操作

对JSON数据中的指定节点进行改操作非常的简单,只需要使用parse对象的update或update_or_create方法即可,使用效果的区别如下所示,轻轻松松就可以完成两种策略下的节点更新操作���:

 Python语言入门到精通--Python中JSON结构数据的高效增删改操作


我是小职,记得找我

✅ 解锁高薪工作

✅ 免费获取基础课程·答疑解惑·职业测评

Python语言入门到精通--Python中JSON结构数据的高效增删改操作

本文由 @小职 发布于职坐标。未经许可,禁止转载。
喜欢 | 0 不喜欢 | 0
看完这篇文章有何感觉?已经有0人表态,0%的人喜欢 快给朋友分享吧~
评论(0)
后参与评论

您输入的评论内容中包含违禁敏感词

我知道了

助您圆梦职场 匹配合适岗位
验证码手机号,获得海同独家IT培训资料
选择就业方向:
人工智能物联网
大数据开发/分析
人工智能Python
Java全栈开发
WEB前端+H5

请输入正确的手机号码

请输入正确的验证码

获取验证码

您今天的短信下发次数太多了,明天再试试吧!

提交

我们会在第一时间安排职业规划师联系您!

您也可以联系我们的职业规划师咨询:

小职老师的微信号:z_zhizuobiao
小职老师的微信号:z_zhizuobiao

版权所有 职坐标-一站式IT培训就业服务领导者 沪ICP备13042190号-4
上海海同信息科技有限公司 Copyright ©2015 www.zhizuobiao.com,All Rights Reserved.
 沪公网安备 31011502005948号    

©2015 www.zhizuobiao.com All Rights Reserved

208小时内训课程