JSON 全称“JavaScript Object Notation”,译为“JavaScript 对象简谱”或“JavaScript 对象表示法”,是一种轻量级的、基于文本的、开放的数据交换格式。json是基于ECMAScript的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据,用于许多web应用程序来进行数据交换。通俗点来说Json是一种文本格式,常用于数据存储。基本结构为键: 值,键仅可以为字符串,而值可以是字符串,列表,数字,或者另一些键值对。
(1)“名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。
(2)值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array)。
JSON具有以下这些形式:
1.对象
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
2.数组
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
值(value)可以是双引号括起来的字符串(string)、数值(number)、true、false、 null、对象(object)或者数组(array)。这些结构可以嵌套。
注意:
JSON中没有undefined
JSON中的字符串必须使用双引号
JSON中是不能用注释的
{
"name":"joy",
"age":18,
"hobby":["running","football"]
}
注意事项:
JSON中对象的属性名必须是双引号,属性值如果是字符串也必须是双引号
JSON只要涉及到字符串就必须使用双引号,不支持undefined
[1,"test",18,null]
[{
"name":"joy",
"age":18,
"hobby":["running","football"]
},
{
"name":"mei",
"age":28,
"hobby":["running","football"]
}
]
json文件:
{“name”:“taoeyhuang”,“age”:18}
import json
with open("data.json", 'r') as load_f:
data=json.load(load_f) # 将读入的json文本转换成Python当中的字典
print(data) # 返回的是一个字典
json文件:
[{“name”:“taoeyhuang”,“age”:18},{“name”:“ggs”,“age”:18}]
import json
with open("data.json", 'r', encoding="utf-8") as load_f:
data=json.load(load_f)
print(data) # 返回的是一个列表
data=[{"geo": "aaaaaa", "road": "512345", "trie": "{123342: {0: {3246: {16869: 0}}, 1: {123: {213: 3}}}}"},
{"geo": "bbbbbb", "road": "512347", "trie": "{123342: {0: {3246: {16869: 0}}, 1: {123: {231: 3}}}}"}]
with open("./test.json", "w", encoding="utf-8") as f:
json.dump(data, f, indent=4, ensure_ascii=False)
obj:
即上述第一个参数,用于传入需要写入Json文件当中的数据。
fp:
即上述第二个参数,用于传入需要写入Json数据的文本指针
indent:
传入Json文件换行缩进量,一般为2或者4。
ensure_ascii:
是否允许Ascii码。若为True(默认),则输入的中文全会转化为\uXXXX存储。
写入到文件中:
如果JSON文件写成多个对象并行的话,会报 JSON standard allows only one top-level value的错。
因为 json格式的文件里面要求只能有一个{ },如果要保存多个{},应该将其组合成[{},{}]的格式。
但这种格式的数据也可以使用,一行是一个对象,每次读取一行就是一个对象了。
list = []
with open("./test.json", encoding='utf-8') as f:
for x in range(num): # 读取指定行
line = f.readline()
if line == '':
break
temp = json.loads(line)
list.append(temp)
参考博客:
Python读写JSON格式数据
什么“JSON标准只允许一个顶级值”?