目录
JSON文件基本介绍
JSON:一种与开发语言无关的、轻量级的数据存储格式,全称JavaScript Object Notation,一种数据格式的标准规范,起初来源于JavaScript这门语言,后来随着使用的广泛,几乎每门开发语言都有处理JSON的API。优点:易于人的阅读和编写,易于程序解析与生产。JSON样例:首先一个花括号{},整个代表一个对象,同时里面是一种Key-Value的存储形式,它还有不同的数据类型来区分
JSON的规则
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。规则如下:
1)映射用冒号(“:”)表示。名称:值
2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2
3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}
4) 并列数据的集合(数组)用方括号(“[]”)表示。
[
{名称1:值,名称2:值2},
{名称1:值,名称2:值2}
]
5 元素值可具有的类型:string, number, object, array, true, false, null
JSON 用冒号(而不是等号)来赋值。每一条赋值语句用逗号分开。整个对象用大括号封装起来。可用大括号分级嵌套数据。对象描述中存储的数据可以是字符串,数字或者布尔值。对象描述也可存储函数,那就是对象的方法。{
“name”:”孙悟空”,
“age”:502,
“skill”:”fly”
}
python读取json文件的方式
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。json的文件格式:使用大括号来区分表示并存储数据; python操作json文件通过了两种方法:
load():用于读取json文件;
dump():用于写入json文件# 读取json文件内容,返回字典格式
with open(‘./path_file/info.json’,’r’,encoding=’utf8′) as fp:
json_data = json.load(fp)
print(‘这是文件中的json数据:’,json_data)
print(‘这是读取到文件数据的数据类型:’, type(json_data))# 将字典数据写入到json文件中
dict1 = {‘name’: ‘孙悟空’, ‘age’: 502, ‘skill’: ‘fly’}
with open(‘./path_file/info.json’,’a’,encoding=’utf8′)as fp:
json.dump(dict1,fp,ensure_ascii=False)
# 如果ensure_ascii ‘ ‘为false,则返回值可以包含非ascii值
python除了提供json文件的操作还提供了对于json格式转换的方法;loads() :将json字符串转换成字典格式;dumps() 将字典格式数据转换成json格式;# 将json字符串转换成字典格式
str1 = ‘{“name”: “孙悟空”, “age”: 502, “skill”: “fly”}’print(‘这是转换后的数据:’,json.loads(str1))
print(‘这是转换后的数据类型:’,type(json.loads(str1)))# 将字典格式数据转换成json格式
dict1 = {‘name’: ‘孙悟空’, ‘age’: 502, ‘skill’: ‘fly’}
print(‘这是将字典转换之后的数据:’,json.dumps(dict1,ensure_ascii=False))
print(‘这是将字典转换之后的数据类型:’,type(json.dumps(dict1,ensure_ascii=False))) # 如果ensure_ascii ‘ ‘为false,则返回值可以包含非ascii值
使用json文件的例子
# -*- coding: utf-8 -*-
# author:Mr Luo
# datetime:2021/4/30 10:36
import json
dict = {
"name":"孙悟空",
"age":502,
"skill":"fly",
"name":"猪八戒",
"age": 507,
"skill": "fly"
}
# 定义变量
jsontext = {'person':[]}
# 为变量赋值,
for key,value in dict.items():
# print(key)
jsontext['person'].append(value)
# dumps() 将字典格式数据转换成json格式;
jsondata = json.dumps(jsontext)
with open('jsondata.json',"a+") as js:
js.write(jsondata)
# 读取json文件内容,返回字典格式
with open('./jsondata.json','r',encoding='utf8') as fp1:
# loads() :将json字符串转换成字典格式
json_data = json.load(fp1)
print('json数据:',json_data)
for key, value in json_data.items():
print(key, ":", value)
注意问题
注意:json.decoder.JSONDecodeError: Extra data: line 1 column 37 (char 36)
问题原因:json文件中有两条记录,并且json.loads()无法解码多个记录。之前已经生成了一个json文件,再次运行时就会报这样的错误。
解决办法:将要打开的json文件重命名,再运行。