【发布时间】:2016-04-21 03:36:35
【问题描述】:
我正在从 AWS(从 javascript 文件)中抓取一些 JSONP 字典。在仅解析类 JSON 数据的原始数据后,在某些情况下,我会得到一个有效的 JSON,并且可以在 Python (json_data = json.loads(json_like_data)) 中成功加载它。但是,一些 Amazon 的 JSONP 不包括在其键周围的引号(见下文)。
...
{type:"storageCurrentGen",sizes:
[{size:"i2.xlarge",vCPU:"4",ECU:"14",memoryGiB:"30.5",storageGB:"1 x 800 SSD",valueColumns:[{name:"linux",prices:{USD:"0.938"}}]},
{size:"i2.2xlarge",vCPU:"8",ECU:"27",memoryGiB:"61",storageGB:"2 x 800 SSD",valueColumns:[{name:"linux",prices:{USD:"1.876"}}]},
{size:"i2.4xlarge",vCPU:"16",ECU:"53",memoryGiB:"122",storageGB:"4 x 800 SSD",valueColumns:[{name:"linux",prices:{USD:"3.751"}}]},
...
对于 JSONP,这仍然有效,因为它是有效的 JavaScript 语法。但是,Python 的 json.loads(json_str) 无效,因为它是无效的 JSON。
还有另一个 Python 模块 YAML 可以处理不带引号的键,但分号后面必须有一个空格 (:)。
我认为我有两个选择。
- 以某种方式替换左大括号或逗号 (
{|,) 和冒号 (:) 之间的字符。然后使用json.loads(...)。 - 在冒号后添加一个空格 (
:)。然后用yaml.load(...)解析。
我的猜测是选项 2 比 1 更好。但是,我正在寻求更好的解决方案的建议。
以前有没有人遇到过这样的格式错误的 JSON 并使用 Python 来解析它?
【问题讨论】:
-
即使是 JavaScript,它也是 not 有效的 JSON。它是有效的 JavaScript,但并不完全相同。