¿Cómo analizar el archivo json con comentarios estilo c?

Tengo un archivo json, como el siguiente:

{ "author":"John", "desc": "If it is important to decode all valid JSON correctly \ and speed isn't as important, you can use the built-in json module, \ orsimplejson. They are basically the same but sometimes simplej \ further along than the version of it that is included with \ distribution." //"birthday": "nothing" //I comment this line } 

Este archivo es creado automáticamente por otro progtwig. ¿Cómo lo analizo con Python?

No puedo imaginar que un archivo json “creado automáticamente por otro progtwig” contenga comentarios dentro. Debido a que la especificación json no define ningún comentario en absoluto, y eso es por diseño , por lo tanto, ninguna biblioteca json generará un archivo json con comentarios.

Esos comentarios usualmente son agregados más tarde, por un humano. No hay excepción en este caso. El OP mencionó que en su publicación: //"birthday": "nothing" //I comment this line .

Entonces, la pregunta real debería ser, ¿cómo comento correctamente el contenido de un archivo json y, a la vez, mantengo el cumplimiento de las especificaciones y, por lo tanto, su compatibilidad con otras bibliotecas json?

Y la respuesta es, cambie el nombre de su campo a otro nombre. Ejemplo:

 { "foo": "content for foo", "bar": "content for bar" } 

se puede cambiar en:

 { "foo": "content for foo", "this_is_bar_but_been_commented_out": "content for bar" } 

Esto funcionará bien la mayor parte del tiempo porque el consumidor probablemente ignorará los campos inesperados (pero no siempre, depende de la implementación del consumidor de su archivo json. Entonces, YMMV).

ACTUALIZACIÓN : Al parecer, algunos lectores no estaban contentos porque esta respuesta no da la “solución” que esperan. Bueno, de hecho, proporcioné una solución de trabajo al vincularme de manera implícita con la cita del diseñador de JSON :

Douglas Crockford Public 30 de abril de 2012 Comentarios en JSON

Eliminé los comentarios de JSON porque vi que la gente los estaba usando para mantener directivas de análisis, una práctica que habría destruido la interoperabilidad. Sé que la falta de comentarios entristece a algunas personas, pero no debería.

Supongamos que está utilizando JSON para mantener los archivos de configuración, que le gustaría anotar. Anímate e inserta todos los comentarios que quieras. Luego colóquelo en JSMin antes de entregárselo a su analizador JSON.

Entonces, sí, adelante, usa JSMin . Solo ten en cuenta que cuando te diriges a “usar comentarios en JSON”, es un territorio conceptualmente inexplorado. No hay garantía de que las herramientas que elija manejen: en línea [1,2,3,/* a comment */ 10] , estilo Python [1, 2, 3] # a comment (que es un comentario en Python pero no en Javascript), estilo INI [1, 2, 3] ; a comment [1, 2, 3] ; a comment , …, ya entiendes la idea.

Aún sugeriría NO agregar comentarios no conformes en JSON en primer lugar.

jsoncomment es bueno, pero el comentario en línea no es compatible.

Echa un vistazo a jstyleson , que apoyan

  • comentario en línea
  • comentario de una sola línea
  • comentario multilínea
  • coma al final

Ejemplo

Instalar

pip install jstyleson

Uso

 import jstyleson result_dict = jstyleson.loads(invalid_json_str) # OK jstyleson.dumps(result_dict) 

No lo he usado personalmente, pero el paquete jsoncomment de python admite el análisis de un archivo JSON con comentarios.

Lo usas en lugar del analizador JSON de la siguiente manera:

 parser = JsonComment(json) parsed_object = parser.loads(jsonString) 

¿Qué tal comentario?

http://commentjson.readthedocs.io/en/latest/

Esto puede analizar algo como abajo.

 { "name": "Vaidik Kapoor", # Person's name "location": "Delhi, India", // Person's location # Section contains info about // person's appearance "appearance": { "hair_color": "black", "eyes_color": "black", "height": "6" } } 

Probable elasticsearch, la API REST de algunos productos no acepta el campo de comentarios. Por lo tanto, creo que los comentarios dentro de json son necesarios para que un cliente pueda mantenerlos, como una plantilla json.


Editado

jsmin parece ser más común.

https://pypi.python.org/pypi/jsmin