我正在从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对其进行解析吗?
您有一个HJSON文档,此时您可以使用该hjson
项目进行解析:
>>> import hjson
>>> hjson.loads('{javascript_style:"Look ma, no quotes!"}')
OrderedDict([('javascript_style', 'Look ma, no quotes!')])
HJSON是JSON,不需要引用对象名称,甚至不需要某些字符串值,还添加了注释支持和多行字符串,并且对应在何处使用逗号使用了宽松的规则(包括根本不使用逗号)。
或者,您可以安装和使用该demjson
库;它支持解析有效的JavaScript(缺少引号):
import demjson
result = demjson.decode(jsonp_payload)
仅当设置该strict=True
标志时,才demjson
拒绝解析您的输入:
>>> import demjson
>>> demjson.decode('{javascript_style:"Look ma, no quotes!"}')
{u'javascript_style': u'Look ma, no quotes!'}
>>> demjson.decode('{javascript_style:"Look ma, no quotes!"}', strict=True)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/demjson.py", line 5701, in decode
return_stats=(return_stats or write_stats) )
File "/Users/mjpieters/Development/venvs/stackoverflow-2.7/lib/python2.7/site-packages/demjson.py", line 4917, in decode
raise errors[0]
demjson.JSONDecodeError: ('JSON does not allow identifiers to be used as strings', u'javascript_style')
使用正则表达式,您可以尝试使用正则表达式将其合法化为有效JSON;但是,这 可能 会导致误报。该模式为:
import re
valid_json = re.sub(r'(?<={|,)([a-zA-Z][a-zA-Z0-9]*)(?=:)', r'"\1"', jsonp_payload)
这与{
或匹配,
,后跟JavaScript标识符(一个字符,后跟更多字符或数字),然后直接跟一个:
冒号。如果您引用的值包含任何此类模式,则将获得无效的JSON。
问题内容: 即使已转义,双引号也会引发解析错误。 看下面的代码 由于双引号(已被转义),因此将引发解析错误。 甚至在这里都不行。 但是,如果我用这样的双斜杠将其转义: 然后就可以了 为什么我们需要在javascript中使用双斜杠?问题是,PHP 函数转义一个单斜杠双引号(是这样的:),这将无法解析。我该如何处理这种情况? 问题答案: 好吧,最后,JSON的解析使用相同的eval,因此,给它们sm
我第一次与Firebase合作进行一个实践项目,我很难设置用户登录其帐户的能力。 我已成功设置注册,但到目前为止,我无法登录并检查身份验证状态是否正常工作。 我在控制台中不断收到的错误是“未捕获引用错误:未定义Firebase” 我自己做了一些研究,但我似乎找到的唯一答案是,你需要包含Firebase的脚本标签,这在这里不相关,因为我已经包含了它们,或者2.4.2版本的过时响应 有关守则如下:
用我的超文本标记语言,下面的代码部分 在控制台上生成以下错误: 未捕获引用错误:未定义WEBGL 我已经导入了所有必要的js,所以问题是:如何解决这个问题?
我更新了我的尝试,将一些内容保留为CHAR,但仍然得到一个类似的错误:第1行错误:ORA-02091:事务回滚ORA-02291:违反完整性约束(MMM1339.ITEMNO_PHAR_FK)-未找到父密钥 需求的外键都在不同的供应主键中有值,所以我不确定为什么仍然存在问题。
问题内容: 在我的node.js应用程序中,我做了一个操作,以便可以使用客户端javascript中固有的btoa()和atob()函数,但由于某种原因未包含在node中。新目录显示在我的node_modules文件夹中,该文件夹本身与app.js一起位于根目录中。然后,确保将btoa- atob作为依赖项添加到根目录下的package.json文件中。 但是,由于某种原因,它仍然无法正常工作。
为什么会出现此重复错误-? 提供的所有字段都不是空的。 架构: 职位: 错误: 创建新用户时出错:WriteError({“code”:11000,“index”:0,“errmsg”:“insertDocument::由引起::11000 E11000重复密钥错误索引:iotdb.users.$name_1 dup key:{:null}”,“op:{“username”:“tealou”,“p