相关文章推荐
大鼻子的小虾米  ·  Spring Boot | 将 html ...·  1 年前    · 
帅呆的柳树  ·  通过在 Azure CDN ...·  1 年前    · 
急躁的伤疤  ·  java - Webflux, How ...·  1 年前    · 


1 简介

在今天的文章中,我就将带大家学习更加高级的 JSON 数据处理方式。



python json去掉反斜杠 python删除json某个内容_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 json去掉反斜杠 python删除json某个内容_python_02

而基于上面产生的一些对象我们就可以实现对 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 json去掉反斜杠 python删除json某个内容_数据可视化_03

接下来的事情就很简单了,只需要在 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 json去掉反斜杠 python删除json某个内容_人工智能_04

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 json去掉反斜杠 python删除json某个内容_人工智能_05

2.1.3 对JSON数据进行改操作

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



python json去掉反斜杠 python删除json某个内容_数据可视化_06

jsonpath-ng 中还有一些丰富的功能,这里就不再赘述,感兴趣的读者朋友可以前往 https://github.com/h2non/jsonpath-ng 查看。


以上就是本文的全部内容,欢迎在评论区与我进行讨论~

---------End---------

java树形结构添加层级 java创建树形结构

记录:在Java后台利用递归思路进行构建树形结构数据,返回给前端,能以下拉菜单等形式进行展示。简明:为了简化代码,引入Lombok的Jar包,可省略实体类set()、get()方法。<dependency> <groupId>org.projectlombok</groupId>

1 dockerserver端安装 2 先下载docker的yum源 3 wget http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo 4 然后安装 5 yum -y install docker-ce 6 在/etc/docker/里修改daemon.json文件,修改成如下