一. 读取以.json结尾的链接

image.png

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

image.png

  • 只能够一个一个解析。

image.png

  • 代码 ```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])

  1. 结果为

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’}

  1. <a name="R1t8l"></a>
  2. ## 二. 将json存到本地的json文件
  3. - 在代码中得到了上面的json文件之后,可以保存到本地的.json文件中,避免每次都要读取链接。
  4. ```python
  5. # 将json_item_list写入本地的json文件
  6. json_file = r'D:\temp.json'
  7. with open(json_file, 'a', encoding='utf-8') as fd:
  8. for item in json_item_list:
  9. # \n 不可少
  10. fd.write(json.dumps(item, ensure_ascii=False) + "\n")

那么本地中出现了temp.json的文件。
image.png
注意:如果出现了存储失败,在下一次重写入之前、先把本地的temp.json删除。

三. 从本地的json文件读取json

  • 从本地直接读取temp.json文件。
    1. # 从本地的json文件读取结果
    2. json_file = r'D:\temp.json'
    3. json_item_list1 = []
    4. with open(json_file, 'r', encoding='utf=8') as fd:
    5. lines = fd.readlines()
    6. for line in lines:
    7. # 在读取每一个item的时候,需要将其json化,否则依然是string。
    8. json_item_list1.append(json.loads(line))
    可以判断,json_item_list1 == json_item_list
    1. print(json_item_list1[0] == json_item_list[0])
    结果为True。

四. 函数

  • 我们可以把上述的步骤转化为函数,方便重复操作。 ```python import requests import json import re

def get_jsonfile_from_url(json_url):

  1. # 通过requests读取该链接。
  2. rsp = requests.get(url=json_url)
  3. # 通过utf-8解码,否则中文乱码。得到html是string。
  4. html = rsp.content.decode('utf-8')
  5. # 通过正则表达式(规则是以"{"开头,以"}\n"结尾),抽出每个item(依然是string),放到list中。
  6. json_item_list = re.findall('{(.*?)}\n', html)
  7. # 先把每个项目添加上{},然后利用json.loads解析每一个json变成json类型,最后扔到json_item_list中。
  8. json_item_list = [json.loads("{" + item + "}") for item in json_item_list]
  9. 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:

  1. # \n 不可少
  2. fd.write(json.dumps(item, ensure_ascii=False) + "\n")
  3. 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:

  1. # 在读取每一个item的时候,需要将其json化,否则依然是string。
  2. json_item_list.append(json.loads(line))
  3. return json_item_list
  1. <a name="z0GFO"></a>
  2. ## 五. 字典型数据的存取
  3. - 字典型数据的存取和json类似。
  4. ```python
  5. import json
  6. def read_dicts(url):
  7. f = open(url, 'r') # encoding='utf-8' 酌情加入
  8. dicts = json.loads(f.read())
  9. f.close()
  10. return dicts
  11. def save_dicts(url, dicts):
  12. json_format = json.dumps(dicts)
  13. with open(url, 'a') as fp: # encoding='utf-8' 酌情加入
  14. fp.write(json_format)
  15. fp.close()

以上~