爬虫学习(十五)——json解析

json与jsonpath

对象{}:jsonobject

对象:对象在js中表现为{}括起来的内容,数据结构为{key:value,key:value...}键值对的结构,在面向对象的结构中,key为对象的属性,key所对应的value为对象的属性值。

取值方式:对象.key 获取属性值,这个属性值的数据类型可以是数字、字符串、数据、对象等

 

数组[]:JSONArray

数组:在js中是中括号[]括起来的内容,数据结构类似此格式["Python", "javascript", "C++", ...]

取值方式:类似python语言中的列表,使用索引进行取值,数组中的值可以是数字、字符串、数组、对象等

 

json方法

1、load()将数据加载成为json类型的数据

读取json文件中的字符串,转化成为python数据类型

如:

obj = json.load(open('book.json', 'r', encoding='utf-8'))

print(type(obj))

2、loads()解码json字符串为json数据

将json格式字符串解码转换成为python对象,从json到python的数据数据转化类型可以对照图表

 

with open('./book.json',mode='r',encoding='utf-8') as f:

json_string = f.read()

# 将json格式字符串转化为对象

obj = json.loads(json_string)

print(type(obj))

3、string串

将json数据

4、dumps()

实现python数据类型转化成为json字符串,返回一个str对象,把python对象编码转换成为json字符串

从python原始类型向json类型转化的对照表如下:

 

如下:

import json

str = '''{"has_more": false, "message": "success", "data": [{"single_mode": true, "abstract": "\u8c22\u8c22\u5927\u5bb6\u559c\u6b22\u6bcf\u65e5\u64b8"}]}'''

print(type(str))

print(json.dumps(str,ensure_ascii=False))

5、dump

将python类型序列化成json对象后写入文件

如:

import json

dictStr = {"city": "北京", "name": "大刘",'info':'\u8c22\u8c22\u5927'}

# Serialize ``obj`` as a JSON formatted stream to ``fp

json.dump(dictStr, open("dictStr.json","w",encoding='utf-8'), ensure_ascii=False,)

 

6、练习总结

import json
# 将文件中的文件读取处理,输出的数据类型为流(字符序列)数据
fp = open("json数据.json",mode="r",encoding="utf8")
# 将流数据加载变成json类型的数据
j = json.load(fp)
print(j,type(j))
# 输出结果:
# {'book': [{'name': '时间简史', 'author': '斯蒂芬·威廉·霍金'}, {'name': '三国演义', 'author': '罗贯中'}]} <class 'dict'>


# 将json类型的数据转化成为python的字符串类型的数据,并将中文的阿斯克码形式转化成中文
a = json.dumps(j,ensure_ascii=False)
print(a,type(a))
# 输出结果
# {"book": [{"name": "时间简史", "author": "斯蒂芬·威廉·霍金"}, {"name": "三国演义", "author": "罗贯中"}]} <class 'str'>

# 创建一个json格式的文件
fp2 =open("json练习二.json",mode="a",encoding="utf8")

# 将json数据写入文件中,并将阿斯克码转换设置为False
json.dump(j,fp2,ensure_ascii=False)
posted @ 2019-02-18 20:44 石桥浪子 阅读(...) 评论(...) 编辑 收藏