【发布时间】:2020-12-20 08:45:26
【问题描述】:
我正在解析一个抓取的 html 页面,其中包含一个带有 JSON 的脚本。此 JSON 包含我正在寻找的所有信息,但我不知道如何提取有效的 JSON。
小例子:
my_string = '
(function(){
window.__PRELOADED_STATE__ = window.__PRELOADED_STATE__ || [];
window.__PRELOADED_STATE__.push(
{ *placeholder representing valid JSON inside* }
);
})()
'
里面的json根据jsonlinter是有效的。
结果应该被加载到字典中:
import json
import re
my_json = re.findall(r'.*(?={\").*', my_string)[0] // extract json
data = json.loads(my_json)
// print(data)
正则表达式:https://regex101.com/r/r0OYZ0/1
这个尝试的结果是:
>>> data = json.loads(my_json)
Traceback (most recent call last):
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/code.py", line 90, in runcode
exec(code, self.locals)
File "<console>", line 1, in <module>
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/__init__.py", line 357, in loads
return _default_decoder.decode(s)
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/decoder.py", line 337, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/decoder.py", line 355, in raw_decode
raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 7 (char 6)
如何使用 Python 3.7.x 从字符串中提取和加载 JSON?
【问题讨论】:
-
您必须使用
json.loads方法(不要忘记s)。但是您的字符串似乎不是有效的 json。 -
确实如此,请再次阅读问题。
-
正则表达式示例中的 JSON 不是有效的 JSON:
{"publicRuntimeConfig":{"public }