首页 > 解决方案 > Medium.com 无效的 Json?

问题描述

我正在尝试从 Medium.com 获取最新帖子,例如,我去这里

https://medium.com/circle-blog/latest?format=json

但是当我将整个 JSON 复制并粘贴到 JSONEditorOnline.org 时,我收到错误消息

Error: Parse error on line 1:
])}while(1);</x>{"su
^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[', got ']'

我意识到错误是因为前面的随机东西

])}while(1);</x>

那么我将如何使用 Python 删除它呢?

删除后,我想将其转储到 JSON 文件中

with open('medium.json', 'w') as json1:
    json1.write(json.dumps(JSONWITHWHILE(1)REMOVED))

我该怎么做呢?

标签: pythonfetchscrape

解决方案


我不会打扰它,因为它显然不是一个有效的 JSON,但如果你需要它,你可以尝试找到第一个打开的花括号并简单地删除它之前的所有内容:

valid_json = broken_json[broken_json.find('{'):]

解释:

  • broken_json.find('{'){返回字符串中字符第一次出现的位置(索引)broken_json
  • broken_json[X:]- 是一个字符串切片,它返回broken_json从该位置开始的子字符串X

与 LeKhan 的解决方案相比,一个优势是当 JSON 变为有效时,即使有此修复,您的代码仍将正常工作。</x>此外,如果它的字段中包含子字符串(这可能是有效的),他的解决方案将返回一个损坏的 JSON 。

注意:它可能不是错误,但出于某种原因故意存在。例如,模块 Medium JSON feed处理它的方式非常相似- 它还在第一个打开的花括号之前剥离了所有内容。

根据这篇文章,它可以防止“ JSON hacking ”,不管它是什么意思。


推荐阅读