python爬虫学习37
数据存储篇——JSON
在最最最前面我们学习urllib库的时候曾经提到过JSON,今天让我们好好研究研究它:
JSON全称是 JavaScriptObjectNotation,即JavaScript对象标记,它通过对象和数组的组合来表示数据,构造简洁且结构化程度高,是一种轻量级数据交换格式。
1. 对象和数组
在JavaScript语言中,一切皆对象因此任何支持的数据类型都可以通过JSON表示,例如字符串、数字、对象、数组等。其中对象和数组是比较常用的类型。
对象
对象在JavaScript中是指用花括号 {} 包围起来的内容,数据结构是键值对结构:{key1 : Value1,key2 : value2},key表示键值对的属性,value表示属性对应的值,属性(key)可以用整数和字符串表示,值(value)可以使用任何类型。
数组
数组在JavaScript中是指用方括号[]包围起来的内容,数据结构是索引结构:[“java” , “javascript”,…]。在JavaScript中数组是一种比较特殊的数据类型,因为他也可以像对象那样使用键值对结构,但在一般情况下使用最多的还是索引结构。同样一个数组的值可以是任意类型。
一个JSON对象
[
{
"name": "Bob",
"gender": "male",
"age": "21"
},
{
"name": "Jane",
"gender": "female",
"age": "22"
}
]
[]包围的地方相当于数组,数组中的元素可以是任意类型,这里的元素是对象使用{}包围。
JSON可以实现两种以上格式任意组合与嵌套,结构清晰,是数据交换的及佳实现方式。
2. 读取JSON
使用Python自带的json库,可以实现json文件的读写操作:
import json
str_0 = """
[{
"name": "Bob",
"gender": "male",
"age": "21"
},{
"name": "Jane",
"gender": "female",
"age": "22"
}]
"""
print("str_0 : ", type(str_0))
json_0 = json.loads(str_0)
print(json_0)
print("json_0 : ", type(json_0))
str_1 = json.dumps(json_0)
print("str_1 : ", type(str_1))
print(str_1)
运行结果:
可以看到,所谓的json格式在Python中就是列表类型,这样就可以使用Python中的方法很容易的从列表中获取信息了。
print(json_0[0]['name'])
print(json_0[1].get('name'))
特别注意的是JSON数据必须使用双引号包围,而不能使用单引号:
import json
str_0 = """
[{
'name': "Bob",
"gender": "male",
"age": "21"
},{
"name": "Jane",
"gender": "female",
"age": "22"
}]
"""
json_0 = json.loads(str_0)
print(json_0)
否则就会报错:
从文本中读取JSON
import json
with open('json_text.txt', 'a+', encoding="utf-8") as file:
file.seek(0)
text = file.read()
data = json.loads(text)
print(data)
运行结果:
也可以使用load方法
import json
data = json.load(open('json_text.txt', encoding='utf-8'))
print(data)
运行结果:
3. 输出JSON
调用dump方法,将JSON保存在文件中
import json
str_0 =[{
"name": "Bob",
"gender": "male",
"age": "21"
}, {
"name": "Jane",
"gender": "female",
"age": "22"
}]
with open('data.txt', 'w', encoding='utf-8') as f:
f.write(json.dumps(str_0))
运行结果:
若想要保存JSON的缩进格式,可以传入indent参数:
import json
str_0 =[{
"name": "Bob",
"gender": "male",
"age": "21"
}, {
"name": "Jane",
"gender": "female",
"age": "22"
}]
with open('data.txt', 'w', encoding='utf-8') as f:
f.write(json.dumps(str_0, indent=2))
运行结果:
需要注意的是当我们使用中文字符时,若想正确的读入需要传入ensure_ascii参数:
import json
str_0 =[{
"name": "郭靖",
"gender": "男",
"age": "21"
}, {
"name": "黄蓉",
"gender": "女",
"age": "22"
}]
with open('data.txt', 'w', encoding='utf-8') as f:
f.write(json.dumps(str_0, indent=2, ensure_ascii=False))
运行结果:
至此,我们一同了解了JSON的使用方法,JSON在进行数据解析式会经常用到,所以大家要多熟悉熟悉。
今日结束,未完待续…
|