一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第2天,点击查看活动详情。
清明假期来了,是我用一周工作六天换来的,可恶的调休. 今天去研究一下,Python使用JSON去存储数据.
什么是JSON
JSON是Java Script Object Notion 是JavaScript对象标记,通过对象和数组来表示数据,构造简单,但是结构化程度非常高,是一种轻量级的数据交换格式.
对象和数组
在JavaScript当中,一切皆对象,所以任何支持的数据类型都尅一通过JSON来表示,比如啊字符串,数字,数组等等.
对象在JavaScript当中使用{}包围起来来表示形式为:{key1:Value1,key2:Value2}是键值对这种形式的,在面向对象这种语言上面,Key表示对象的属性,Value代表属性的值,前者用整数和字符串来表示,后者可以用任意类型
数组在JavaScript当中是使用[]来包起来的内容,形式为:["Java","JavaScript"] 这种结构,并且在JavaScript当中,数组是一个比较特殊的存在,它可以像对象那样使用键值对的结构.数组的内容可以是上面的对象. 而Json由上面组合而成能够无限次嵌套,结构清晰,数据交换的很好的实现方式
读取JSON
我的理解啊,Json 是Python中的列表与字典的结合.
import json
str =''' [{"name":"Flynt","age" : 18},{"name" : "flora", "age":18}] '''
print(type(str))
data = json.loads(str)
print(data)
print(type(data))
运行结果:
我们使用了loads将字符串转变成为了JSON对象,由于最外面是中括号,所以最终的数据类型是list,这样我们就可以使用对应的索引来获取对应的内容了.比如
print(data[0]["name"])
print(data[0].get("name"))
我们可以得到 flynt,这里有一个小技巧,虽然这两种方式都可以实现取值,我推荐使用第二种,可以避免键名不存在报错只会返回none,不仅如此,使用print(data[0].get("name","hello"))如果该键名没有会返回传入的值,相当于设了一个默认值了.
读取文本JSON
with open("data.json",encoding="utf-8") as file:
str = file.read()
data = json.loads(str)
print(data)
更简单的方式:
data = json.load(open("data.json",encoding="utf-8"))
print(data)
输出JSON
str = [{"name":"Flynt","age" : 18},{"name" : "flora", "age":18}]
with open("data.json","w",encoding="utf-8") as file:
file.write(json.dumps(str))
输出且保留缩进
str = [{"name":"Flynt","age" : 18},
{"name" : "flora", "age":18}]
with open("data.json", 'w') as file:
file.write(json.dumps(str, indent=2))
后记: 如果包含中文字符不识别的解决方案:
str = [{"name":"Flynt","age" : 18},
{"name" : "flora", "age":18}]
with open("data.json", 'w') as file:
file.write(json.dumps(str, indent=2,ensure_ascii=False))