首页 > 解决方案 > 仅从 JSON 文件中抓取选择字段

问题描述

我试图只生成以下 JSON 数据字段,但由于某种原因它将整个页面写入 .html 文件?我究竟做错了什么?它应该只生成引用的框,例如标题、audiosource url、中等大小的图像等?

r    = urllib.urlopen('https://thisiscriminal.com/wp-json/criminal/v1/episodes?posts=10000&page=1')
data = json.loads(r.read().decode('utf-8'))
for post in data['posts']:
#    data.append([post['title'], post['audioSource'], post['image']['medium'], post['excerpt']['long']])
    ([post['title'], post['audioSource'], post['image']['medium'], post['excerpt']['long']])
with io.open('criminal-json.html', 'w', encoding='utf-8') as r:
  r.write(json.dumps(data, ensure_ascii=False))

标签: pythonjsonpython-2.7urlliburlopen

解决方案


您想要区分输入数据和输出数据。在您的 for 循环中,您引用的变量data与用于输入的变量与用于输出的变量相同。您希望将输入中的选定数据添加到包含输出的列表中。

不要重复使用相同的变量名。这是你想要的:

import urllib
import json
import io

url = urllib.urlopen('https://thisiscriminal.com/wp-json/criminal/v1/episodes?posts=10000&page=1')
data = json.loads(url.read().decode('utf-8'))
posts = []
for post in data['posts']:
    posts.append([post['title'], post['audioSource'], post['image']['medium'], post['excerpt']['long']])
with io.open('criminal-json.html', 'w', encoding='utf-8') as r:
    r.write(json.dumps(posts, ensure_ascii=False))

推荐阅读