Day 41 41.2 Python中json模块之dumps参数详解

发布时间 2023-05-21 18:34:39作者: Chimengmeng

Python的JSON用法之dumps的各种参数用法(详细)

JSON 是用于存储和交换数据的语法。

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

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

import json

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

【一】json的数据类型和python数据类型的区别

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

【二】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()

# -*-coding: Utf-8 -*-
# @File : dumps1 .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time:2023/5/21

import json

x = {'name': 'dream', 'age': 18, 'city': 'china'}

# 用dumps将python编码成json字符串(这里json会默认在:后面加上一个空格)
print(json.dumps(x))
# {"name": "dream", "age": 18, "city": "china"}

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

【2】json.dump()

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

  • text.txt

{'name':'dream','age':19,'city':'China'}
  • py
# -*-coding: Utf-8 -*-
# @File : dumps1 .py
# author: Chimengmeng
# blog_url : https://www.cnblogs.com/dream-ze/
# Time:2023/5/21

import json

x = {'name': 'dream', 'age': 19, 'city': 'China'}

# 将python编码成json放在那个文件里
filename = 'text.txt'
with open(filename, 'w') as f:
    json.dump(x, f) 
  • 转换后的的文件.text.txt
{"name": "dream", "age": 19, "city": "China"}

【四】dumps的一些参数(重点)

  • 因为dumps编码以后的json格式输出比较的紧凑
    • 如果不止一行看起来就不是特别好看,就像一堆乱码似的。
    • 所以,就推出了一些可选参数来让json码的可读性更高。
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)

【1】obj:

  • 就是你要转化成json的对象。

【2】sort_keys =True:

  • 是告诉编码器按照字典排序(a到z)输出。
  • 如果是字典类型的python对象,就把关键字按照字典排序。

【3】indent:

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

【4】separators:

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

【5】skipkeys

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

【6】ensure_ascii=True

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

【7】check_circular:

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

【8】allow_nan:

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

【9】default:

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