一. 读取以.json结尾的链接
- 如果有链接是以.json结尾,那么能够通过python读取。
- 例如,url = r’http://120.27.94.149/digital_media_monitor/tonghuashun_20201209.json‘。打开这个链接之后,是一个一个json项目。

- 如果把这个json文本的全部内容全部放到json.cn中,无法直接解析。

- 只能够一个一个解析。

- 代码 ```python import requests import json import re
通过requests读取该链接。
json_url1 = r’http://120.27.94.149/digital_media_monitor/tonghuashun_20201209.json‘ rsp = requests.get(url=json_url1)
通过utf-8解码,否则中文乱码。得到html是string。
html = rsp.content.decode(‘utf-8’)
通过正则表达式(规则是以”{“开头,以”}\n”结尾),抽出每个item(依然是string),放到list中。
json_item_list = re.findall(‘{(.*?)}\n’, html)
先把每个项目添加上{},然后利用json.loads解析每一个json变成json类型,最后扔到json_item_list中。
json_item_list = [json.loads(“{“ + item + “}”) for item in json_item_list]
可以看看一共有多少个项目。
print(len(json_item_list), json_item_list[0])
结果为
826 {‘publish_time’: ‘2020-12-09 16:12:32’, ‘title’: ‘三大原因引发A股跳水,抄底机会曝光!’, ‘url’: ‘https://t.10jqka.com.cn/m/live/liveHome/livehome.html?sid=181642&fid=211986&pid=143271939&from=other‘, ‘comment_num’: 188, ‘author’: ‘慧眼点金’, ‘comment_list’: [], ‘tag’: [], ‘like_num’: 119, ‘crawl_time’: ‘2020-12-09 16:30:23’, ‘text’: ‘’, ‘article_id’: ‘181642’, ‘read_num’: 30956, ‘channel’: ‘recommend’}
<a name="R1t8l"></a>## 二. 将json存到本地的json文件- 在代码中得到了上面的json文件之后,可以保存到本地的.json文件中,避免每次都要读取链接。```python# 将json_item_list写入本地的json文件json_file = r'D:\temp.json'with open(json_file, 'a', encoding='utf-8') as fd:for item in json_item_list:# \n 不可少fd.write(json.dumps(item, ensure_ascii=False) + "\n")
那么本地中出现了temp.json的文件。
注意:如果出现了存储失败,在下一次重写入之前、先把本地的temp.json删除。
三. 从本地的json文件读取json
- 从本地直接读取temp.json文件。
可以判断,json_item_list1 == json_item_list# 从本地的json文件读取结果json_file = r'D:\temp.json'json_item_list1 = []with open(json_file, 'r', encoding='utf=8') as fd:lines = fd.readlines()for line in lines:# 在读取每一个item的时候,需要将其json化,否则依然是string。json_item_list1.append(json.loads(line))
结果为True。print(json_item_list1[0] == json_item_list[0])
四. 函数
- 我们可以把上述的步骤转化为函数,方便重复操作。 ```python import requests import json import re
def get_jsonfile_from_url(json_url):
# 通过requests读取该链接。rsp = requests.get(url=json_url)# 通过utf-8解码,否则中文乱码。得到html是string。html = rsp.content.decode('utf-8')# 通过正则表达式(规则是以"{"开头,以"}\n"结尾),抽出每个item(依然是string),放到list中。json_item_list = re.findall('{(.*?)}\n', html)# 先把每个项目添加上{},然后利用json.loads解析每一个json变成json类型,最后扔到json_item_list中。json_item_list = [json.loads("{" + item + "}") for item in json_item_list]return json_item_list
def save_jsonfile_to_local(json_item_list, json_file): with open(json_file, ‘a’, encoding=’utf-8’) as fd: for item in json_item_list:
# \n 不可少fd.write(json.dumps(item, ensure_ascii=False) + "\n")print("File is saved.")
def get_jsonfile_from_local(json_file): json_item_list = [] with open(json_file, ‘r’, encoding=’utf=8’) as fd: lines = fd.readlines() for line in lines:
# 在读取每一个item的时候,需要将其json化,否则依然是string。json_item_list.append(json.loads(line))return json_item_list
<a name="z0GFO"></a>## 五. 字典型数据的存取- 字典型数据的存取和json类似。```pythonimport jsondef read_dicts(url):f = open(url, 'r') # encoding='utf-8' 酌情加入dicts = json.loads(f.read())f.close()return dictsdef save_dicts(url, dicts):json_format = json.dumps(dicts)with open(url, 'a') as fp: # encoding='utf-8' 酌情加入fp.write(json_format)fp.close()
以上~
