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

目录
  • 导包
  • api介绍
  • 常见用法
    • json转python内置对象
      • 字典对象
      • 数组对象
      • 文件读取
    • python内置对象转json
      • 字典转json
      • 字典转json(压缩存储)
      • 字典转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用法内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • python标准库模块之json库的基础用法

    目录 前言 作用 loads,load的用法 dumps,dump的用法 结语 前言 json,全称为JavaScript Object Notation,也就是JavaScript对象标记,通过对象和数组的组合表示数据,虽然构造简洁但是结构化程度非常高,是一种轻量级的数据交换格式. 作用 主要用于将python对象编码为json格式输出或存储,以及将json格式对象解码为python对象. 一个 JSON 对象可以写为如下形式: [{ "name": "小明",

  • python的json包位置及用法总结

    JSON是一种独立于语言的文本格式,用于数据交换,可以在不同语言间交换数据. 在高级版本的Python里自带json模块包,使用import json直接导入模块. JSON文本以"键/值"对形式定义,Python里的json模块主要用于"Python数据与JSON格式的数据间相互转换". JSON的数据类型: 数字(整数或浮点数),字符串(" "),逻辑值(True/False),数组([ ]),对象({ }),null. json模块里常用的

  • python的json中方法及jsonpath模块用法分析

    本文实例讲述了python的json中方法及jsonpath模块用法.分享给大家供大家参考,具体如下: 什么是json JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式,它使得人们很容易的进行阅读和编写.同时也方便了机器进行解析和生成.适用于进行数据交互的场景,比如网站前台与后台之间的数据交互. json模块中方法的学习 其中类文件对象的理解: 具有read()或者write()方法的对象就是类文件对象,比如f = open("a.txt",

  • python中的Json模块dumps、dump、loads、load函数用法详解

    目录 json的作用 python中的Json模块dumps.dump.loads.load函数用法详解 1.json.dumps()和loads() 2.json.dump()和json.load() 3.如何读取写入多行数据呢? json的作用 JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式 json.dumps(): 对数据进行编码,把python对象转换为字符串数据json.loads(): 对数据进行解码,把json的字符串转换为pyth

  • Python中最好用的json库orjson用法详解

    目录 1 简介 2 orjson常用方法 2.1 序列化 2.2 反序列化 2.3 丰富的option选项 2.4 针对dataclass.datetime添加自定义处理策略 总结 1 简介 大家好,我们在日常使用 Python 的过程中,经常会使用 json 格式存储一些数据,尤其是在 web 开发中.而 Python 原生的 json 库性能差.功能少,只能堪堪应对简单轻量的 json 数据存储转换需求. 而本文我要给大家介绍的第三方 json 库 orjson ,在公开的各项基准性能测试中

  • python中json.dumps()和json.loads()的用法

    目录 一.JSON介绍 二.Python和Json数据类型的映射 三.json.load(s)与json.dump(s)区别 四.测试 4.1 json.dumps() 4.2 json.loads() 4.3 json.dump() 4.4 json.load() 五.报错分析 5.1 本地代码 5.2 报错返回 5.3 报错分析与解决 总结 一.JSON介绍 JSON代表JavaScript对象符号.它是一种轻量级的数据交换格式,用于存储和交换数据.它是一种独立于语言的格式,非常容易理解,因

  • python中json操作之json.loads、json.load、json.jumps及json.jump用法

    目录 前言 0.python类型与json类型互换表 1.将json字符串转化(反序列化) (1)json.loads (2)json.load 延伸:如果.json文件中有注释怎么办 2.将python对象转化(序列化) (1)json.dumps (2)json.dump 总结 前言 经常在Python中对JSON格式的文件进行操作,今天对这些操作做一个总结 首先,需要导入json库import json 0.python类型与json类型互换表 Python JSON dict objec

  • Python Http请求json解析库用法解析

    httpparser介绍 :1.解析字节类型的http与https请求数据 :2.支持已k-v形式修改请求数据 :3.支持重新编码请求数据 源码 import json __author = "-ling" def parser(request_data): # 获取请求的三个段: # 1.请求方法 URI协议 版本 # 2.请求头(Request Header) # 3.请求正文 index0 = request_data.find(b"\r\n\r\n") re

  • python中强大的format函数实例详解

    python中format函数用于字符串的格式化 自python2.6开始,新增了一种格式化字符串的函数str.format(),此函数可以快速处理各种字符串. 语法 它通过{}和:来代替%. 请看下面的示例,基本上总结了format函数在python的中所有用法 #通过位置 print '{0},{1}'.format('chuhao',20) print '{},{}'.format('chuhao',20) print '{1},{0},{1}'.format('chuhao',20) #

  • python 中split 和 strip的实例详解

     python 中split 和 strip的实例详解 一直以来都分不清楚strip和split的功能,实际上strip是删除的意思:而split则是分割的意思. python中strip() 函数和 split() 函数的理解,有需要的朋友可以参考下. splite 和strip 都是Python 对字符串的处理. splite 意为分割,划分. a='123456' a.split('3') 输出为 ['12', '456'] 可以看到,使用何种字符切割,该字符也被略去.例如这里的字符"3&

  • java中静态导入机制用法实例详解

    java中静态导入机制用法实例详解 这里主要讲解了如何使用Java中静态机制的用法,这里提供了简单实例大家可以参考下. 静态常量类 在java开发中,我们会经常用到一些静态常量用于状态判断等操作.为了能够在多个地方复用这些常量,通常每个模块都会加一个常量类,举个简单的列子: import com.sky.OrderMouleConsstants; /** * Created by gantianxing on 2017/4/21. */ public class Test { public vo

  • python中的二维列表实例详解

    1. 使用输入值初始化列表 nums = [] rows = eval(input("请输入行数:")) columns = eval(input("请输入列数:")) for row in range(rows): nums.append([]) for column in range(columns): num = eval(input("请输入数字:")) nums[row].append(num) print(nums) 输出结果为: 请

  • Python subprocess模块功能与常见用法实例详解

    本文实例讲述了Python subprocess模块功能与常见用法.分享给大家供大家参考,具体如下: 一.简介 subprocess最早在2.4版本引入.用来生成子进程,并可以通过管道连接他们的输入/输出/错误,以及获得他们的返回值. subprocess用来替换多个旧模块和函数: os.system os.spawn* os.popen* popen2.* commands.* 运行python的时候,我们都是在创建并运行一个进程,linux中一个进程可以fork一个子进程,并让这个子进程ex

  • Python科学计算包numpy用法实例详解

    本文实例讲述了Python科学计算包numpy用法.分享给大家供大家参考,具体如下: 1 数据结构 numpy使用一种称为ndarray的类似Matlab的矩阵式数据结构管理数据,比python的列表和标准库的array类更为强大,处理数据更为方便. 1.1 数组的生成 在numpy中,生成数组需要指定数据类型,默认是int32,即整数,可以通过dtype参数来指定,一般用到的有int32.bool.float32.uint32.complex,分别代表整数.布尔值.浮点型.无符号整数和复数 一

  • JS正则表达式常见用法实例详解

    本文实例讲述了JS正则表达式常见用法.分享给大家供大家参考,具体如下: 前言:正则表达式(regular expression)反反复复学了多次,学了又忘,忘了又学,这次打算把基本的东西都整理出来,加强记忆,也方便下次查询. 学习正则表达式之前首先需要掌握记忆这些基本概念: 1.元字符:(.,\w,\W,\d,\D,\s,/S,^,$,) 字符 含义 . 匹配除了换行符以外的任意字符. \s 代表任意空白符(换行符,制表符,空格) \S 匹配任意非空字符串 \b 匹配单词边界,匹配单词的开头和结

  • C#中构造函数和析构函数用法实例详解

    本文实例讲述了C#中构造函数和析构函数用法.分享给大家供大家参考,具体如下: 构造函数与析构函数是一个类中看似较为简单的两类函数,但在实际运用过程中总会出现一些意想不到的运行错误.本文将较系统的介绍构造函数与析构函数的原理及在C#中的运用,以及在使用过程中需要注意的若干事项. 一.构造函数与析构函数的原理 作为比C更先进的语言,C#提供了更好的机制来增强程序的安全性.C#编译器具有严格的类型安全检查功能,它几乎能找出程序中所有的语法问题,这的确帮了程序员的大忙.但是程序通过了编译检查并不表示错误

  • Android开发中的重力传感器用法实例详解

    本文实例讲述了Android开发中的重力传感器用法.分享给大家供大家参考,具体如下: 重力传感器与方向传感器的开发步骤类似,只要理清了期中的x,y,z的值之后就可以根据他们的变化来进行编程了,首先来看一副图 假设当地的重力加速度值为g 当手机正面朝上的时候,z的值为q,反面朝上的时候,z的值为-g 当手机右侧面朝上的时候,x的值为g,右侧面朝上的时候,x的值为-g 当手机上侧面朝上的时候,y的值为g,右侧面朝上的时候,y的值为-g 了解了重力传感器中X,Y,Z的含义之后下面我们就开始学习如何使用

  • Python定义函数功能与用法实例详解

    本文实例讲述了Python定义函数功能与用法.分享给大家供大家参考,具体如下: 1.函数的意义 一般数学上的函数是,一个或者几个自变量,通过某种计算方式,得出一个因变量. y = f(x) 在Python中,为了使操作更加简洁,就引入了函数这个概念. Python中的函数,可以把一大串要反复使用的代码"定义"(封装)成一个函数,给予这个函数一个标识符作为函数名,设置自变量和因变量.然后要使用这一大串代码的时候,就调用这个我们自己创造的函数,输入自变量,然后会返回给我们因变量. 2.函数

随机推荐