Python基础教程

010_Python读写json文件

Python读写json文件

pickle能对任意Python对象进行二进制序列化与反序列化。

json主要对特定Python对象(字典dict)进行文本(字符串)序列化与反序列化。

json是什么格式

json是字符串,里面的内容由键key和值value成对组成,与字典相似。

json字符串内只能使用双引号"",不能使用单引号。

手动编写一个json字符串,开始如下

ajson='{"name":"zhangsan","age":18}'

形式上就是字典dict变成了字符串(字典里面使用的是双引号,最外层单引号表示整体是字符串)。

经常见到文件形式的json,格式化之后表现如下(文本文件mydata.json)。

{
  "name": "zhangsan",
  "comp": ["comp1","comp2","comp3"],
  "age": 18
}

json(JSON)表示的对象就是标准的JavaScript语言的对象。下表,是python数据类型和json数据类型之间的映射关系。

python json
dict {}, object
list, tuple [], array
str string
int, float number
True true
False false
None null

json模块的读写主要方法

Python标准库中json模块提供了非常完善的Python对象到JSON格式的转换。

  • json序列化(生成json字符串):json.dumps()
  • json反序列化(读取json字符串):json.loads()
  • json序列化(写入文件):json.dump()
  • json反序列化(读取文件):json.load()

这里容易忘记序列化的意思,记住一点,序列化是为了方便存储,比如序列化dumps()成字符串json。

Python读取json

把json字符串转换为Python字典dict对象(反序列化,读取json)

import json

ajson='{"name":"zhangsan","age":18}'

avar=json.loads(ajson)

print(type(avar))         # <class 'dict'>
print(avar)               # {'name': 'zhangsan', 'age': 18}

Python写入json

把json字符串转换为Python字典dict对象(序列化,生成json)

import json

adict={"name":"zhangsan","age":18}

avar=json.dumps(adict)

print(type(avar))         # <class 'str'>
print(avar)               # {"name": "zhangsan", "age": 18}

Python在文件中写入json

将json字符串序列化到文件中。下面在工程中创建脚本文件t09.py,内容如下

将Python对象"adict"序列化到文件“ajfile”中

import json

adict={"name":"zhangsan","age":18}

with open("ajfile","w") as f:      # 注意,这里是文本文件的操作,是字符串
    json.dump(adict,f)

程序运行之后,工程目录中会生成一个二进制文件“ajfile”,用记事本打开,里面是文本。

文本内容如下。

{"name": "zhangsan", "age": 18}

Python从文件中读取json

在工程中创建脚本文件t10.py,编写反序列化程序,内容如下

import json

with open("ajfile","r") as f:
    avar = json.load(f)
    print(type(avar))     # <class 'dict'>
    print(avar)           # {'name': 'zhangsan', 'age': 18}

json格式与字典dict的关系

json(JSON)是JavaScript语言中的对象,dict是Python语言中的对象。它们之间存在很多区别,但是不需要刻意比较。

使用时只需要记住,json是字符串,里面是双引号,形式与字典dict键值对一样,它们之间可以相互转换。

有一点需要注意,dict字典里嵌套元组tuple,而在json字符串中就是数组。

这篇文章对您有用吗? 2

我们要如何帮助您?