如何将原始javascript对象转换为python字典?

kev*_*kev 10 javascript python json web-scraping

屏幕抓取一些网站时,我从<script>标签中提取数据.
我得到的数据不是标准JSON格式.我不能用json.loads().

# from
js_obj = '{x:1, y:2, z:3}'

# to
py_obj = {'x':1, 'y':2, 'z':3}
Run Code Online (Sandbox Code Playgroud)

目前,我regex用来将原始数据转换为JSON格式.
但是当我遇到复杂的数据结构时,我感觉非常糟糕.

你有更好的解决方案吗?

kev*_*kev 32

demjson.decode()

import demjson

# from
js_obj = '{x:1, y:2, z:3}'

# to
py_obj = demjson.decode(js_obj)
Run Code Online (Sandbox Code Playgroud)

jsonnet.evaluate_snippet()

import json, _jsonnet

# from
js_obj = '{x:1, y:2, z:3}'

# to
py_obj = json.loads(_jsonnet.evaluate_snippet('snippet', js_obj))
Run Code Online (Sandbox Code Playgroud)

ast.literal_eval()

import ast

# from
js_obj = "{'x':1, 'y':2, 'z':3}"

# to
py_obj = ast.literal_eval(js_obj)
Run Code Online (Sandbox Code Playgroud)

  • demjson 在 Python 3 中出现问题,因为 Setuptools 删除了对 2to3 的支持。因此,对于现在使用 python 3.X 的人来说,它可能不是一个有效的替代方案。 (4认同)

Bik*_*ram 15

使用json5

import json5

js_obj = '{x:1, y:2, z:3}'

py_obj = json5.loads(js_obj)

print(py_obj)

# output
# {'x': 1, 'y': 2, 'z': 3}
Run Code Online (Sandbox Code Playgroud)

  • **警告**:除非你有非常小的对象,否则不要使用 JSON5,​​他们的文档中明确指出它很慢。他们没有说谎,即使是平均大小的 JSON,它也非常非常慢。在采用之前,请在真实用例上对其进行测试。(我测试的是0.9.8版本) (2认同)

Lyh*_*kia 5

今天下午我面临同样的问题,我终于找到了一个很好的解决方案。那是JSON5

JSON5 的语法更类似于原生 JavaScript,因此可以帮助您解析非标准的 JSON 对象。

您可能想查看pyjson5