Python中json的load、loads、dump、dumps的用法

在处理数据时经常会用到json的load和dump功能,很容易把load和loads的功能记混,学习不能一知半解,特此记录一下。用json的load/loads读取文件的好处是可以把存储的数据以原始的对象格式加载出来,比如可以加载字典(dict)、列表(list)等,而普通的读取数据可能只能把文件内容当作文本字符串读取出来。

1.json文件格式

  • dict:{"姓名": "张三", "年龄": 18}
  • list:["张三", "李四"]
  • 字符串:"张三李四王五" (注意,必须有双引号)
  • 纯数字:123

首先要明白哪些格式属于json文件,才能被json load,否则使用json load/loads会报错。不是文件名后缀为.json的才属于json文件,无论有没有后缀,或者后缀是.txt等,只要文件内容符合上面的格式,都可以使用json load/loas函数。注意,字典格式的key一定得是字符串,如果没有加引号等不符合标准字典格式则也会报错。

2.json load和loads的用法

json load/loads是将json格式的数据转成python对象,简单来说,

load是对文件进行操作的,因此load的主要参数是打开的文件,调用格式通常为 load(f)

loads是对字符串进行操作的,因此loads的主要参数是字符串,调用格式通常为 load(str)

(为了方便记忆,可以把loads后面的小尾巴s理解为str)

更全面的参数用法可以参考文末的链接,一般情况下使用基础用法已能适用大部分情况。

下面展示读取json数据时的常用写法:

下面以dict格式的数据文件text1.json为例,其他格式也一样,都可以通过以下方式读取:

text1.json的文件内容如下:

  • json.load()
# coding=utf-8
import json

file = "text1.json"
with open(file, encoding="utf-8") as f:  # 注意编码要和文件编码一致,不加encoding参数默认使用gbk编码读取文件
    dic = json.load(f)

print(dic)
print(type(dic))
_______________________________________
{'姓名': '张三', '年龄': 18}
  • json.loads()
with open(file, encoding="utf-8") as f:
    for line in f:
        dic2 = json.loads(line.strip())  # 此时的line是字符串格式
print(dic2)
print(type(dic2))
_______________________________________
{'姓名': '张三', '年龄': 18}

json.loads的方式是先读取每行的字典格式的字符串,再解析成字典。这种方法也可以读取文件中有多行dict的形式,此时json.load就不行。

3. json dump和dumps的用法

理解了load/loads的用法,dump和dumps的用法就也很简单了,将一个python对象进行json格式的编码,和load、loads是对应的。

dump是将python对象转成json格式存入文件,主要格式是dump(obj, f)

dumps是将python对象转成json格式的字符串,主要格式是dumps(obj)

下面展示存储son数据时的常用写法:

  • json.dump()
file = "save1.json"
dic = {"姓名": "张三", "年龄": 18}
with open(file, "w") as w:
    json.dump(dic, w, ensure_ascii=False)

可以看出json.dump是没有返回值的,直接将dic写进文件w中。

  • json.dumps()
file = "save2.json"
dic = {"姓名": "张三", "年龄": 18}
with open(file, "w") as w:
    w.write(json.dumps(dic, ensure_ascii=False))

json.dumps是将obj转成str,因此有返回值str,再用write()函数把字符串写入文件。

注意在dump/dumps时一般都需要加ensure_ascii=False这个参数,否则存储的文件可能是乱码,如下:

ensure_ascii: 默认值为True,能将所有传入的非ASCII字符转义输出。如果ensure_ascii为False,则这些字符将按原样输出。

【参考链接】

Python 基础 之 json load 、dump、loads 和 dumps 的简单说明和使用

json文件格式详解

over.

你可能感兴趣的:(json,python,javascript)