¿Cómo convertir el objeto javascript en bruto al diccionario de Python?

Al raspar la pantalla de algún sitio web, extraigo datos de las tags .
Los datos que obtengo no están en formato JSON estándar. No puedo usar json.loads() .

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

Actualmente, uso regex para transformar los datos en bruto a formato JSON .
Pero me siento muy mal cuando me encuentro con una estructura de datos complicada.

¿Tienes algunas soluciones mejores?

demjson.decode()

 import demjson # from js_obj = '{x:1, y:2, z:3}' # to py_obj = demjson.decode(js_obj) 

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)) 

ast.literal_eval()

 import ast # from js_obj = "{'x':1, 'y':2, 'z':3}" # to py_obj = ast.literal_eval(js_obj) 

Es probable que esto no funcione en todas partes, pero como comienzo, aquí hay una expresión regular que debe convertir las claves en cadenas entre comillas para que pueda pasar a json.loads. ¿O es esto lo que ya estás haciendo?

 In[70] : quote_keys_regex = r'([\{\s,])(\w+)(:)' In[71] : re.sub(quote_keys_regex, r'\1"\2"\3', js_obj) Out[71]: '{"x":1, "y":2, "z":3}' In[72] : js_obj_2 = '{x:1, y:2, z:{k:3,j:2}}' Int[73]: re.sub(quote_keys_regex, r'\1"\2"\3', js_obj_2) Out[73]: '{"x":1, "y":2, "z":{"k":3,"j":2}}' 

Simplemente:

 import json py_obj = json.loads(js_obj_stringified) 

Arriba está la parte de Python del código. En javascript parte del código:

 js_obj_stringified = JSON.stringify(data); 

JSON.stringify convierte un objeto Javascript en texto JSON y almacena ese texto JSON en una cadena. Es una forma segura de pasar (a través de POST / GET) un objeto javascript a python para procesar.