Python 中的json常见用法实例详解

 更新时间:2022年12月28日 15:21:00   作者:小楼夜听雨QAQ  
这篇文章主要介绍了Python 中的json常见用法,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

博主在开发一些C端小软件时,喜欢用json作为序列化方案,故总结下python中json库常见用法。

导包

自带的库,无需额外安装。

import json

api介绍

序列化:

这里可以理解为将python中的各种数据结构转化为json字符串的过程。

涉及api:dump、dumps

反序列化

将输入的json字符串,转化为python对象的过程。

涉及api:load、loads

加s和不加s的区别:

以反序列化为例,如果需要从文件中读取数据,则使用load,直接传入文件描述符。

简而言之,就是需要从文件中读写数据时,使用load、dump,否则使用loads、dumps

常见用法

json转python内置对象

json会被适当地转化为python中的list或者dic类型的对象。

字典对象

代码示例:

user_dic = json.loads('{"name": "admin", "age": 20, "children": {"name": "child1", "age": 1}}')
print(type(user_dic))
print(user_dic)

运行结果:

<class 'dict'>
{'name': 'admin', 'age': 20, 'children': {'name': 'child1', 'age': 1}}

数组对象

代码示例:

user_list = json.loads('[1,2,3,4]')
print(type(user_list))
print(user_list)

运行结果:

<class 'list'>
[1, 2, 3, 4]

文件读取

代码示例:

with open('out.json', mode='r', encoding='utf-8') as fp:
    user_dic = json.load(fp=fp)
    print(type(user_dic))
    print(user_dic)

文件中存储的json

{
    "age": 20,
    "children": {
        "age": 1,
        "name": "child1"
    },
    "name": "admin"
}

运行结果:

<class 'dict'>
{'age': 20, 'children': {'age': 1, 'name': 'child1'}, 'name': 'admin'}

python内置对象转json

字典转json

json_str = json.dumps({'name': 'admin', 'age': 20, 'children': {'name': 'child1', 'age': 1}})
print(type(json_str))
print(json_str)

 结果:

<class 'str'>
{"name": "admin", "age": 20, "children": {"name": "child1", "age": 1}}

 字典转json(压缩存储)

 如果存储后的数据并不用于人工阅读,可以考虑去除所有地空格和换行。

json_str = json.dumps({'name': 'admin', 'age': 20, 'children': {'name': 'child1', 'age': 1}}, separators=(',', ':'))
print(type(json_str))
print(json_str)

 结果:

<class 'str'>
{"name":"admin","age":20,"children":{"name":"child1","age":1}}

 字典转json(美化输出)

适用于对外展示,提高可读性;这里的indent=4表示缩进空格数。

json_str = json.dumps({'name': 'admin', 'age': 20, 'children': {'name': 'child1', 'age': 1}}, sort_keys=True, indent=4)
print(type(json_str))
print(json_str)

 结果:

<class 'str'>
{
    "age": 20,
    "children": {
        "age": 1,
        "name": "child1"
    },
    "name": "admin"
}

 文件读取

with open('out.json', mode='w+', encoding='utf-8') as fp:
    json.dump(fp=fp, obj={'name': 'admin', 'age': 20, 'children': {'name': 'child1', 'age': 1}}, sort_keys=True, indent=4)

自定义对象

如果是自定义的对象,需要先将对象转化为字典类型,再使用json库相关的api。

普通对象

class Child:
    def __init__(self, name):
        self.name = name
class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

单个对象

# 序列化对象
s_str = json.dumps(Student('admin', 18).__dict__)
print(s_str)
 
# 反序列化对象
student_obj = Student(**json.loads(s_str))
print(student_obj)

 数组对象

# 序列化数组
s_list = [Student('admin1', 1), Student('admin2', 2)]
s_str = json.dumps([obj.__dict__ for obj in s_list])
print(s_str)
 
# 反序列化数组
student_list = []
for st in json.loads(s_str):
    student_list.append(Student(**st))
print(student_list)

 嵌套对象

出现嵌套对象时,思路也是一样的,都优先转化为字典。

class Child:
    def __init__(self, name):
        self.name = name
 
    def __str__(self):
        return "{0}".format(self.name)
 
 
class Student:
    def __init__(self, name, age, children: Child):
        self.name = name
        self.age = age
        self.children = children
 
    def __str__(self):
        return "{0}, {1}, children:{2}".format(self.name, self.age, self.children)

 单个对象

# 序列化
s_str = json.dumps(Student('admin', 18, Child('son')), default=lambda o: o.__dict__, indent=4)
print(s_str)
# 反序列化
decode_s = Student(**json.loads(s_str))
print(decode_s)

 对象数组

# 序列化
s_list = [Student('admin1', 1, Child('son1')), Student('admin2', 2, Child('son2'))]
s_str = json.dumps([obj.__dict__ for obj in s_list], default=lambda o: o.__dict__, indent=4)
print(s_str)
# 反序列化最外层套了一个list,其他与单个对象一致。

补充知识点

上述示例中出现的 ** 是一种传参方式,接收字典类型的数据。

def func(**kwargs):
    print(kwargs['a'])
    print(kwargs['b'])
    print(type(kwargs))
 
s_dic = {'a': 1, "b": 2}
func(**s_dic)

 输出结果为

1
2
<class 'dict'>

到此这篇关于Python 中的json常见用法的文章就介绍到这了,更多相关python json用法内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法

    解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法

    这篇文章主要介绍了解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • Python fileinput模块使用实例

    Python fileinput模块使用实例

    这篇文章主要介绍了Python fileinput模块使用实例,本文讲解了典型用法、基本格式、默认格式、常用函数和常见例子等内容,需要的朋友可以参考下
    2015-06-06
  • Python语言实现科学计算器

    Python语言实现科学计算器

    这篇文章主要为大家详细介绍了Python语言实现科学计算器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-01-01
  • 人脸识别实战之Opencv+SVM实现人脸识别

    人脸识别实战之Opencv+SVM实现人脸识别

    这篇文章主要介绍了通过Opencv+SVM实现人脸识别功能,文中的示例代码介绍详细,对于我们学习人脸识别和OpenCV都有一定的帮助,感兴趣的小伙伴可以学习一下
    2021-12-12
  • Python命令行库click的具体使用

    Python命令行库click的具体使用

    本文主要介绍了Python命令行库click的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • python+selenium 定位到元素,无法点击的解决方法

    python+selenium 定位到元素,无法点击的解决方法

    今天小编就为大家分享一篇python+selenium 定位到元素,无法点击的解决方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-01-01
  • 详解OpenCV图像的概念和基本操作

    详解OpenCV图像的概念和基本操作

    opencv最主要的的功能是用于图像处理,所以图像的概念贯穿了整个opencv,与其相关的核心类就是Mat。这篇文章主要介绍了OpenCV图像的概念和基本操作,需要的朋友可以参考下
    2021-10-10
  • Python编程实战之Oracle数据库操作示例

    Python编程实战之Oracle数据库操作示例

    这篇文章主要介绍了Python编程实战之Oracle数据库操作,结合具体实例形式分析了Python的Oracle数据库模块cx_Oracle包安装、Oracle连接及操作技巧,需要的朋友可以参考下
    2017-06-06
  • TensorFlow固化模型的实现操作

    TensorFlow固化模型的实现操作

    这篇文章主要介绍了TensorFlow固化模型的实现操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-05-05
  • Python接口自动化浅析数据驱动原理

    Python接口自动化浅析数据驱动原理

    这篇文章主要介绍了Python接口自动化浅析数据驱动原理,文中会详细描述怎样使用openpyxl模块操作excel及结合ddt来实现数据驱动,有需要的朋友可以参考下
    2021-08-08

最新评论