目录

  • 一、JSON是什么
  • 1.json的数据类型和python数据类型的区别
  • 2.json库的一些方法
  • 二、json.dump()和json.dumps()的区别
  • 1.json.dumps()
  • 2.json.dump()
  • 3.dumps的一些参数(重点)
  • 4.dump的参数
  • 三、json.load()和json.loads()的区别
  • 1.json.loads()
  • 2.json.load()


一、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函数的用法 python中json.dumps_ci

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://www.iteye.com/blog/liuzhijun-1859857