python中json模块的使用


写在前面

从9月26号因病住院,到10月19号暂时出院,这期间一直没有机会写博客,在园区的时候也总忍不住玩游戏,必须要做些什么才行,就慢慢的回到学习的状态吧。

Json模块

该模块为python3.x自带模块,无需使用pin install命令进行安装。 使用方式: import json

json.loads()

#input
import json
a = "[1,2,3,4]"
b = '{"k1":1,"k2":2}'
print(json.loads(a))
print(type(json.loads(a)))
print(json.loads(b))
print(type(json.loads(b)))
#output
[1, 2, 3, 4]
<class 'list'>
{'k1': 1, 'k2': 2}
<class 'dict'>

json.dumps()

#input
a = [1,2,3,4]
b = {"k1":1,"k2":2}
c = (1,2,3,4)
d = {"name":"中国"}
print(json.dumps(a))
print(json.dumps(b))
print(json.dumps(c))
print(json.dumps(d))
#想要正常输出中文需要将ensure_ascii指定为False
print(json.dumps(d,ensure_ascii = False))
print(chardet.detect(json.dumps(d).encode()))
#output
[1, 2, 3, 4]
{"k1": 1, "k2": 2}
[1, 2, 3, 4]
{"name": "\u4e2d\u56fd"}
{"name": "中国"}
{'encoding': 'ascii', 'confidence': 1.0, 'language': ''}

json.dump()

a = [1,2,3,4]
#将a保存到digital.json文件中
json.dump(a,open("digital.json","w"))
b = {"name":"我"}
#name.json中的“我”字为正常中文
json.dump(b,open("name.json","w"),ensure_ascii = False)
#name2.json中的“我”字为Unicode编码
json.dump(b,open("name2.json","w"),ensure_ascii = True)

json.load()

#input
number = json.load(open("digital.json"))
print(type(number))
print(number)
b = json.load(open("name.json"))
print(b)
print(list(b.keys())[0])
print(b['name'])
#output
<class 'list'>
[1, 2, 3, 4]
{'name': '我'}
name

练习1

#获取豆瓣电影及评分
import josn
import requests
url = 'https://movie.douban.com/j/search_subjects?type=movie&tag=%E7%83%AD%E9%97%A8&page_limit=50&page_start=0'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36',
    'Referer':'https://movie.douban.com','Connection':'keep-alive'
    }
req = requests.get(url = url,headers = headers)
html = req.text
hjson = json.loads(html)
for item in hjson["subjects"]:
    print(item['rate'],item['title'])

练习2

import json
import requests
import jsonpath
url = 'http://www.lagou.com/lbs/getAllCitySearchLabels.json?'
headers = {
    'User-Agent':'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/85.0.4183.102 Safari/537.36', 'Referer':'https://movie.douban.com','Connection':'keep-alive'
    }
req = requests.get(url = url,headers = headers)
html = req.text
hjson = json.loads(html)
#输出拼音首字母为A的城市
for item in hjson['content']['data']['allCitySearchLabels']["A"]:
    print(item['name'],item['code'])
#使用jsonpath解析数据,并将所有城市保存
citylist = jsonpath.jsonpath(hjson,"$..name")
content = json.dumps(citylist,ensure_ascii = False)
fp = open('city.json','w')
fp.write(content)
fp.close()

总结

json.loads()将json字符串转换为python类型,json.dumps()将python类型转换为json字符串。

写在后面

19号出院后我写了大概6400字的日记,记录住院这些天的所见所闻,文笔不好,只作留存记忆用,如果哪天我想起来为那篇日记润色,就会一点点的写到博客里。 若是遇到了真心喜欢的女子,怕也只敢相忘于江湖。