使用python解析json字段的3种方式实例

 更新时间:2022年07月26日 09:27:13   作者:H.S.T不想卷  
JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,下面这篇文章主要给大家介绍了关于使用python解析json字段的3种方式,文中通过实例代码介绍的非常详细,需要的朋友可以参考下

1、运用re、json、jsonpath包解析json思路

(1)re:正则表达式,通过json的形式对症下药,写表达式去解析json;

(2)json: 通过json中的json.loads()方法,将str类型转为dict类型,运用python字典的数据结构特点去解析json;

(3)jsonpath:对比与json包,jsonpath可以根据路径去解析json,比较适合用来解析json中带“[ ]”的数据。

2、三种方式的json解析案例

#json数据样式,本文采用带[]的数据样式
{
    "version": "version 1.0.12",
    "result": {
        "pages": 1314,
        "data": [
            {
                "name": "大明",
                "IDcard": "440588190001015688",
                "address": "广东省广州市天河区正佳广场99楼520号",
            },
            {
                "name": "二明",
                "IDcard": "440588190012317456",
                "address": "广东省广州市天河区天环广场88楼520号",
            }
        ]
    }
}

(1)运用re正则表达式解析json

import re
jsondata={
    "version": "23231cimesfedkk",
    "result": {
        "pages": 1314,
        "data": [
            {
                "name": "大明",
                "IDcard": "440588190001015688",
                "address": "广东省广州市天河区正佳广场99楼520号",
            },
            {
                "name": "二明",
                "IDcard": "440588190012317456",
                "address": "广东省广州市天河区天环广场88楼520号",
            }
        ]
    }
}

if __name__ == '__main__':
    name_list=re.findall(r"'name': '(\w*)'",str(jsondata))
    IDcard_list=re.findall(r"'IDcard': '(\w{18})'", str(jsondata))#身份证18位数字和字母组合
    address_list=re.findall(r"'address': '(\w*)'", str(jsondata))#地址
    print(name_list)
    print(IDcard_list)
    print(address_list)

运行结果:

['大明', '二明']
['440588190001015688', '440588190012317456']
['广东省广州市天河区正佳广场99楼520号', '广东省广州市天河区天环广场88楼520号']

(2)运用字典的数据结构性质解析json

import json
jsondata={"version": "23231cimesfedkk","result": {"pages": 1314,"data": [{"name": "大明","IDcard": "440588190001015688","address": "广东省广州市天河区正佳广场99楼520号",},{"name": "二明","IDcard": "440588190012317456","address": "广东省广州市天河区天环广场88楼520号",}]}}
if __name__ == '__main__':
    # 若传入的数据为str类型需要将它转成dict类型
    # result = json.loads(jsondata)
    jsondata = jsondata["result"]["data"]
    resultdata = jsondata
    namelist=[]
    idcardlist=[]
    addresslist=[]
    for data in resultdata:
        namelist.append(data['name'])
        idcardlist.append(data['IDcard'])
        addresslist.append(data['address'])
    print(namelist)
    print(idcardlist)
    print(addresslist)

运行结果:

['大明', '二明']
['440588190001015688', '440588190012317456']
['广东省广州市天河区正佳广场99楼520号', '广东省广州市天河区天环广场88楼520号']

(3)运用jsonpath的路径解析json

import jsonpath

jsondata={"version": "23231cimesfedkk","result": {"pages": 1314,"data": [{"name": "大明","IDcard": "440588190001015688","address": "广东省广州市天河区正佳广场99楼520号",},{"name": "二明","IDcard": "440588190012317456","address": "广东省广州市天河区天环广场88楼520号",}]}}
if __name__ == '__main__':
    namelist=[]
    idcardlist=[]
    addresslist=[]
    #运用jsonpath.jsonpath(字典数据, 路径)
    namelist=jsonpath.jsonpath(jsondata, '$..name')
    idcardlist=jsonpath.jsonpath(jsondata, '$..IDcard')
    addresslist=jsonpath.jsonpath(jsondata, '$..address')
    print(namelist)
    print(idcardlist)
    print(addresslist)

运行结果:

['大明', '二明']
['440588190001015688', '440588190012317456']
['广东省广州市天河区正佳广场99楼520号', '广东省广州市天河区天环广场88楼520号']

3、附录:re正则表达式语法

附:python 处理非标准 json 格式字符串

在写爬虫的时候,会发现很多数据都是通过 json 格式进行传输的,标准的 json 我们可以将其转化为 Python 中的数据类型,进行查询,但对于一些类似于 json 但又非标准 json 格式的字符,就会比较头疼了,这里统计一些咱遇到的非标准的 json 格式,及相应的解析方法。

字符串中 key 的值没有被单引号包裹

类似于这种字符,看上去格式和 json 很像(眼尖的朋友可能发现了,这是 qq 的数据 嘿嘿),但仔细观察会发现,这其中的 key 没有被单引号包裹起来,这就导致了它无法被简单的解析为字典类型,因为解析的时候 key 会被解析成相应的变量而非字符,这些变量又都没有定义,所以会报错。

那怎么办呢?咱的第一反应是利用正则去人为构造成标准的格式,不过这个难度系数有点大,对正则的要求挺高,还费脑子,明显不符合咱的风格。于是咱就去网上找了一下,有没有现成的方法,还真有呢:

使用 demjson

首先安装 demjson

pip install demjson
s = '{suggestion:[{query:"London",interpretation: \'abc\'}]}'
dict1 = demjson.decode(s)
print(dict1)
{'suggestion': [{'interpretation': 'abc', 'query': 'London'}]}

总结

到此这篇关于使用python解析json字段的3种方式的文章就介绍到这了,更多相关python解析json字段内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 在Python中使用列表生成式的教程

    在Python中使用列表生成式的教程

    这篇文章主要介绍了在Python中使用列表生成式的教程,列表生成式是Python具有的重要特性,需要的朋友可以参考下
    2015-04-04
  • Python自动登录126邮箱的方法

    Python自动登录126邮箱的方法

    这篇文章主要介绍了Python自动登录126邮箱的方法,涉及Python针对邮箱操作的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  • 基于python实现动态烟雾效果

    基于python实现动态烟雾效果

    动态烟雾效果常用于游戏和动画中,为场景增添 逼真的视觉效果,在这篇博客中,我们将使用Python和Pygame库来创建一个逼真的烟雾动画效果,感兴趣的小伙伴跟着小编一起来看看吧
    2024-09-09
  • Python+tkinter实现一个绘图风格控件

    Python+tkinter实现一个绘图风格控件

    这篇文章主要为大家详细介绍了Python如何利用tkinter实现一个简单的绘图风格控件,文中的示例代码讲解详细,感兴趣的小伙伴可以学习一下
    2023-09-09
  • 搞笑的程序猿:看看你是哪种Python程序员

    搞笑的程序猿:看看你是哪种Python程序员

    这篇文章主要介绍了搞笑的程序猿:看看你是哪种Python程序员,不久前,在互联网上出现了一篇有趣的文章,讲的是对于同一个问题,不同层次的Python程序员编出的Python代码,显示出了不同的风格,代码都很简单,有趣,需要的朋友可以参考下
    2015-06-06
  • Python实例练习逆序输出字符串讲解

    Python实例练习逆序输出字符串讲解

    今天小编就为大家分享一篇关于Python字符串逆序输出的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2022-05-05
  • Python基于回溯法子集树模板实现8皇后问题

    Python基于回溯法子集树模板实现8皇后问题

    这篇文章主要介绍了Python基于回溯法子集树模板实现8皇后问题,简单说明了8皇后问题的原理并结合实例形式分析了Python回溯法子集树模板解决8皇后问题的具体实现技巧,需要的朋友可以参考下
    2017-09-09
  • python 爬取影视网站下载链接

    python 爬取影视网站下载链接

    一个简单的爬取影视网站下载链接的爬虫,非常适合新手学习,感兴趣的朋友可以参考下
    2021-05-05
  • 详解Python 3D引擎Ursina如何绘制立体图形

    详解Python 3D引擎Ursina如何绘制立体图形

    Python有一个不错的3D引擎——Ursina。本文就来手把手教你认识Ursina并学会绘制立体图形,感兴趣的小伙伴可以跟随小编一起学习一下
    2023-01-01
  • pyqt5 获取显示器的分辨率的方法

    pyqt5 获取显示器的分辨率的方法

    今天小编就为大家分享一篇pyqt5 获取显示器的分辨率的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-06-06

最新评论