当前位置:首页 > 后端开发 > python的JSON用法——dumps的各种参数用法(详细)

python的JSON用法——dumps的各种参数用法(详细)

7个月前 (05-20)48

一、JSON是什么

JSON 是用于存储和交换数据的语法。JSON (JavaScript Object Notation)最初是用 JavaScript 对象表示法编写的文本,但随后成为了一种常见格式,被包括Python在内的众多语言采用。

python里面的语言对象一般只有python能读懂,为了能比较好储存,而且能够让别的编程语言也能读懂这些数据,就会用json来转换储存。或者说把json数据类型的转化成python的数据类型。

1.json的数据类型和python数据类型的区别

Python Json
dict object
list,tuple array
str,unicode string
int,long,float number
True true
False false
None null

2.json库的一些方法

方法 作用
json.dumps() 将python对象编码成Json字符串
json.loads() 将Json字符串解码成python对象
json.dump() 将python中的对象转化成json储存到文件中
json.load() 将文件中的json的格式转化成python对象提取出来

二、json.dump()和json.dumps()的区别

json.dumps()是把python对象转换成json对象的一个过程,生成的是字符串。
json.dump()是把python对象转换成json对象生成一个fp的文件流,和文件相关。

1.json.dumps()

在使用json方法的时候要记住先引进这个库,用import json

import json

x = {
     'name':'你猜','age':19,'city':'四川'}

#用dumps将python编码成json字符串
print(json.dumps(x))

这里我用的中文,我觉得看差别就比较大。
然后就可以得到:

{
     "name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}

这里就还有一个区别,注意我上面python字符串专门用的单引号,转化以后,json就用的是双引号了。

2.json.dump()

这个方法结合了文件的操作,把转换后的json储存在了文件里。

import json

x = {
     'name':'你猜','age':19,'city':'四川'}

#讲python编码成json放在那个文件里
filename = 'pi_x.txt'
with open (filename,'w') as f:
    json.dump(x,f)

然后我们打开文件,就能看到编码后储存进去的json码:
python的JSON用法——dumps的各种参数用法(详细) _ Java侠

3.dumps的一些参数(重点)

因为dumps编码以后的json格式输出比较的紧凑,如果不止一行看起来就不是特别好看,就像一堆乱码似的。所以,就推出了一些可选参数来让json码的可读性更高。当然,不用,就像我上面那样子也是OK滴。
参数如下:

json.dumps(obj, skipkeys=False, ensure_ascii=True, check_circular=True, allow_nan=True, cls=None, indent=None, separators=None, encoding="utf-8", default=None, sort_keys=False, **kw)

obj:就是你要转化成json的对象。
sort_keys =True:是告诉编码器按照字典排序(a到z)输出。如果是字典类型的python对象,就把关键字按照字典排序。

import json

x = {
     'name':'你猜','age':19,'city':'四川'}
y = json.dumps(x)
print(y)

z = json.dumps(x,sort_keys = True)
print(z)

输出:

{
     "name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
{
     "age": 19, "city": "\u56db\u5ddd", "name": "\u4f60\u731c"}

indent:参数根据数据格式缩进显示,读起来更加清晰。

import json

x = {
     'name':'你猜','age':19,'city':'四川'}

#用dumps将python编码成json字符串
y = json.dumps(x)
print(y)

z = json.dumps(x, indent=2)
print(z)

输出:

{
     "name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
{
     
  "name": "\u4f60\u731c",
  "age": 19,
  "city": "\u56db\u5ddd"
}

separators:是分隔符的意思,参数意思分别为不同dict项之间的分隔符和dict项内key和value之间的分隔符,把:和,后面的空格都除去了。

import json

x = {
     'name':'你猜','age':19,'city':'四川'}

#用dumps将python编码成json字符串
y = json.dumps(x)
print(y)

i = json.dumps(x,separators=(',',':'))
print(i)

输出:

{
     "name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
{
     "name":"\u4f60\u731c","age":19,"city":"\u56db\u5ddd"}

skipkeys:默认值是False,如果dict的keys内的数据不是python的基本类型(str,unicode,int,long,float,bool,None),设置为False时,就会报TypeError的错误。此时设置成True,则会跳过这类key 。

x = [ {
     'name':'你猜','age':19,'city':'四川',('hobby',):'Game'} ]

try:
    print(json.dumps(x))
except (TypeError, ValueError) as err:
    print ('ERROR:', err)
    
print()
json.dumps(x,skipkeys=True)

注意在hobby那里我用的是元组,然后输出是:

ERROR: keys must be str, int, float, bool or None, not tuple

'[{"name": "\\u4f60\\u731c", "age": 19, "city": "\\u56db\\u5ddd"}]'

ensure_ascii=True:默认输出ASCLL码,如果把这个该成False,就可以输出中文。

import json

x = {
     'name':'你猜','age':19,'city':'四川'}

#用dumps将python编码成json字符串
y = json.dumps(x)
print(y)

s = json.dumps(x,ensure_ascii=False)
print(s)

输出:

{
     "name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
{
     "name": "你猜", "age": 19, "city": "四川"}

check_circular:如果check_circular为false,则跳过对容器类型的循环引用检查,循环引用将导致溢出错误(或更糟的情况)。

allow_nan:如果allow_nan为假,则ValueError将序列化超出范围的浮点值(nan、inf、-inf),严格遵守JSON规范,而不是使用JavaScript等价值(nan、Infinity、-Infinity)。

default:default(obj)是一个函数,它应该返回一个可序列化的obj版本或引发类型错误。默认值只会引发类型错误。

4.dump的参数

dump(obj, fp, skipkeys=False, ensure_ascii=True, check_circular=True,allow_nan=True, cls=None, indent=None, separators=None,default=None, sort_keys=False, **kw)

其实这个和json.dumps()就是多了一个fp的文件参数,就上面讲过这两个的区别,一个是关于文件之间的储存,一个是字符串之间的转换。(qwq快肝不动了)

三、json.load()和json.loads()的区别

json.loads()是针对内存对象,将string转换为dict。
json.load()针对文件句柄,将json格式的字符转换为dict,从文件中读取 (将string转换为dict)

1.json.loads()

import json

x = {
     'name':'你猜','age':19,'city':'四川'}

#用dumps将python编码成json字符串
x = json.dumps(x)
print(x)

#用loads将json编码成python
print(json.loads(x))

结果是:

{
     "name": "\u4f60\u731c", "age": 19, "city": "\u56db\u5ddd"}
{
     'name': '你猜', 'age': 19, 'city': '四川'}

2.json.load()

import json

x = {
     'name':'你猜','age':19,'city':'四川'}

filename = 'pi_x.txt'
with open (filename,'w') as f:
    json.dump(x,f)
with open (filename) as f_1:
    print(json.load(f_1))

显示的结果是:

{
     'name': '你猜', 'age': 19, 'city': '四川'}

这就把我们储存在txt文件里面的json格式的内容读取出来了。

啊,这次整理这个也是为了给自己扫扫盲吧。去网上找了很多那些参数的作用之类的,但是可能不够完善,或者有些错误qwq,毕竟小猴知识还是不怎么到位~文章里面采用了很多博主优秀的总结,放在下面啦。如果有错了的,请一定告诉小猴,一定改。
https://blog.csdn.net/u014552678/article/details/72990994
https://www.iteye.com/blog/liuzhijun-1859857
https://blog.csdn.net/weixin_40636692/article/details/81212304

作者:爱吃草莓蛋糕的猴
来源链接:https://blog.csdn.net/qq_46293423/article/details/105785007

标签: Python

“python的JSON用法——dumps的各种参数用法(详细)” 的相关文章

Python 多环境搭建方法

Python 多环境搭建方法

大多数小伙伴在第一次接触 python 的时候都会被它强大的包所吸引,想要写一个网站可以使用 Django ,想要做数学运算就想到了 Numpy ,...

Python3.x中,使用print时出错(SyntaxError: Missing parentheses in call to 'print')解决办法

Python2到Python3,很多基本的函数接口变了,甚至有些库或函数被去掉或改名了  在Python 3.x中,print是函数,这意味着需要编写print (...

python 利用scipy.stats生成截断正态分布(truncated normal distribution)

python 利用scipy.stats生成截断正态分布(truncated normal distribution)

关于截断正态分布(truncated normal distribution)这里不再赘述,简言之就是在均值和方差之外,再指定正态分布随机数群的上下限,如[μ-3σ, μ+3...

idea配置python和django开发环境

idea配置python和django开发环境

配置python: 1.先去官网安装python,这里装的是3.7版本的,传送门:https://www.python.org/downloads/,安装好后没有自动配...

Linux安装python环境方法

1. wget https://www.python.org/ftp/python/2.7.11/Python-2...

怎么把python添加到系统环境变量

怎么把python添加到系统环境变量

怎么把python添加到系统环境变量 在我的电脑上右击,打开属性。 点击高级系统设置。 点击高级下的环境变量。...

selenium + python 环境配置 (二)之启动IE

selenium + python 环境配置 (二)之启动IE

安装好python、selenium工具后,下一步就是启动浏览器 1.启动IE浏览器    即Selenium 调用IEDriverServer打开IE浏...

python安装以及VS运行环境搭建

python安装以及VS运行环境搭建

python安装以及VS运行环境搭建 简介(必看) 一.python安装...

Mac 电脑安装 Python 环境

Mac 电脑安装 Python 环境

大家好啊,我是大田 2022.04.08,日更第 62 / 365 天。 今天来给大家分享下在 Mac 电脑上如何安装 Python 环境。...

X分钟速成Python3

# 用井字符开头的是单行注释 """ 多行字符串用三个引号 包裹,也常被用来做多 行注释 """ ############################...