def evaluate_javascript(s):
"""Evaluate and stringify a javascript expression in node.js, and convert the
resulting JSON to a Python object"""
node = Popen(['node', '-'], stdin=PIPE, stdout=PIPE)
stdout, _ = node.communicate(f'console.log(JSON.stringify({s}))'.encode('utf8'))
return json.loads(stdout.decode('utf8'))
6条答案
按热度按时间lskq00tm1#
∮ ∮ ∮ ∮
∮ ∮ ∮ ∮
∮ ∮ ∮ ∮
ast.literal_eval()
k10s72fa2#
使用json5
laik7k3q3#
今天下午我也遇到了同样的问题,我终于找到了一个很好的解决方案,那就是JSON5。
JSON5的语法更类似于原生JavaScript,因此可以帮助您解析非标准JSON对象。
你可能想看看pyjson5。
snvhrwxg4#
这可能并不适用于所有地方,但作为开始,这里有一个简单的正则表达式,它应该将键转换为带引号的字符串,以便您可以传递到json.loads中。
xoshrz7s5#
如果系统上有
node
,可以让它为你计算javascript表达式,并打印字符串化的结果,然后将结果JSON提供给json.loads
:unguejic6#
不包括对象
json.负载()
json.loads()
不接受未定义,您必须更改为nulljson.loads()
仅接受双引号{"foo": 1, "bar": null}
如果你确信你的javascript代码只有键名有双引号,那么就使用这个。
最后文本求值()
ast.literal_eval()
不接受未定义,您必须更改为无ast.literal_eval()
不接受null,您必须更改为Noneast.literal_eval()
不接受True,您必须更改为Trueast.literal_eval()
不接受false,您必须更改为Falseast.literal_eval()
接受单引号和双引号{"foo": 1, "bar": None}
或{'foo': 1, 'bar': None}