Python JSON文件操作
- json的值可以为数字(整数,浮点数),字符串,逻辑值(true,false),数组,对象(类似python字典),null
{
"name":"小友",
"age":18,
"money":2019.28,
"rich":false,
"interest":["eat","play"],
"property":{
"car":null,
"house":1
},
"school":[
{
"s-name":"广州第一小学",
"address":"广州"
},
{
"s-name":"广州第一中学",
"address":"广州"
}
]
}
json
-
json模块是Python自带的模块, 用于json与python数据之间的相互转换
-
什么是包含json的类文件对象?
-
- 就是一个使用open打开的指向json格式文件的对象
-
-
- rf = open(“xx.json”, ‘r’) 这里rf就是
-
-
-
- wf = open(“xx.json”, “w”) 这里wf也是
-
-
dump与dumps的两个参数
-
- ensure_ascii: 是否使用ascii方式写入,默认True, 中文就会显示编码的后内容,如果指定False则以UTF-8编码写入,此时打开文件也必须指定UTF-8
-
- indent: 用于指定代码块之间缩进几个空格
loads
# 准备json格式的字符串
json_str = '{"a":10, "b":20, "c":true, "d":["a","b","中文"]}'
# 把json字符串转为为python
dic = json.loads(json_str)
dumps
# 把python中数据类型转换为json字符串
json_s = json.dumps(dic)
dump
# 操作文件
# with open("test.json", 'w', encoding='utf8') as f:
# json.dump(dic, f)
with open("test.json", 'w', encoding='utf8') as f:
json.dump(dic, f, ensure_ascii=False, indent=2)
load
with open('test.json', 'r', encoding='utf8') as f:
a = json.load(f)
json使用注意点1
-
json中的字符串都是双引号引起来的
-
- 如果不是双引号
-
-
- eval:能实现简单的字符串和python类型的转化
-
-
-
- replace:把单引号替换为双引号
-
-
往一个文件中写入多个json串,不再是一个json串,不能直接读取
-
- 一行写一个json串,按照行来读取 f.readline()
# json模块只能处理标准的json字符串
json_str = "{'a':1, 'b':2, 'c':3}"
# 报错
# dic = json.loads(json_str)
# print(dic)
# 方案1: 如果数量比较小,可以使用eval
dic = eval(json_str)
print(dic)
print(type(dic))
# 方案2: 把单引号,都替换为""
json_str = json_str.replace("'", "\"")
dic = json.loads(json_str)
print(dic)
json使用注意点2
-
一般是字典之间的转换,当然列表也是可以的,例如:
a="[123]" b= json.loads(a) # b = [123] c = json.dumps(b) # c = '[123]' #同理load和dump一样可以对列表进行操作 json_list = [1, 2, 3, 4, 5, 6] with open('city.json', 'w', encoding='utf8') as f: json.dump(json_list, f,ensure_ascii=False) with open('city.json', 'r', encoding='utf8') as f: a= json.load(f) print(a) # [1, 2, 3, 4, 5, 6] print(type(a)) # <class 'list'>