¿Hay alguna manera de hacer simplejson menos estricto?

Estoy interesado en que simplejson.loads() éxito lo siguiente:

 {foo:3} 

JSONDecodeError un JSONDecodeError dice “esperando el nombre de la propiedad”, pero en realidad está diciendo ” JSONDecodeError comillas dobles alrededor de los nombres de mi propiedad”. Esto es molesto para mi caso de uso, y preferiría un comportamiento menos estricto. He leído los documentos, pero más allá de crear mi propia clase de decodificador, no veo nada obvio que cambie este comportamiento.

Puedes usar YAML (> = 1.2) ya que es un superconjunto de JSON, puedes hacer:

 >>> import yaml >>> s = '{foo: 8}' >>> yaml.load(s) {'foo': 8} 

Puedes probar demjson .

 >>> import demjson >>> demjson.decode('{foo:3}') {u'foo': 3} 

No, esto no es posible. Para analizar con éxito que utilizando simplejson, primero tendría que transformarlo en una cadena JSON válida.

Dependiendo de qué tan estricto sea el formato de la cadena entrante, esto podría ser bastante simple o extremadamente complejo.

Para un caso simple, si siempre tendrá un objeto JSON que solo tiene letras y guiones bajos en claves (sin comillas) y enteros como valores, podría usar lo siguiente para transformarlo en JSON válido:

 import re your_string = re.sub(r'([a-zA-Z_]+)', r'"\1"', your_string) 

Por ejemplo:

 >>> re.sub(r'([a-zA-Z_]+)', r'"\1"', '{foo:3, bar:4}') '{"foo":3, "bar":4}'