¿Se pueden utilizar comentarios en JSON?

Resuelto Michael Gundlach asked hace 16 años • 61 respuestas

¿ Puedo usar comentarios dentro de un archivo JSON ? ¿Si es así, cómo?

Michael Gundlach avatar Oct 29 '08 03:10 Michael Gundlach
Aceptado

No.

JSON es solo de datos. Si incluye un comentario, también debe contener datos.

Podría tener un elemento de datos designado llamado "_comment"(o algo así) que las aplicaciones que usan datos JSON deberían ignorar.

Probablemente sería mejor tener el comentario en los procesos que generan/reciben el JSON, ya que se supone que deben saber de antemano cuáles serán los datos JSON, o al menos su estructura.

Pero si decidiste:

{
   "_comment": "comment text goes here...",
   "glossary": {
      "title": "example glossary",
      "GlossDiv": {
         "title": "S",
         "GlossList": {
            "GlossEntry": {
               "ID": "SGML",
               "SortAs": "SGML",
               "GlossTerm": "Standard Generalized Markup Language",
               "Acronym": "SGML",
               "Abbrev": "ISO 8879:1986",
               "GlossDef": {
                  "para": "A meta-markup language, used to create markup languages such as DocBook.",
                  "GlossSeeAlso": ["GML", "XML"]
               },
               "GlossSee": "markup"
            }
         }
      }
   }
}
Eli avatar Oct 28 '2008 21:10 Eli

No , no se permiten comentarios del formulario //…o en JSON. /*…*/Esta respuesta se basa en:

  • https://www.json.org
  • RFC 4627 : El application/jsontipo de medio para la notación de objetos JavaScript (JSON)
  • RFC 8259 Formato de intercambio de datos de notación de objetos JavaScript (JSON) (reemplaza a los RFC 4627, 7158, 7159)

Incluya comentarios si lo desea; quítelos con un minificador antes de analizarlos o transmitirlos.

Acabo de publicar JSON.minify() , que elimina los comentarios y los espacios en blanco de un bloque de JSON y lo convierte en un JSON válido que se puede analizar. Entonces, podrías usarlo como:

JSON.parse(JSON.minify(my_str));

Cuando lo publiqué, recibí una gran reacción de personas que no estaban de acuerdo incluso con la idea, así que decidí escribir una publicación de blog completa sobre por qué los comentarios tienen sentido en JSON . Incluye este notable comentario del creador de JSON:

Suponga que está utilizando JSON para guardar archivos de configuración que le gustaría anotar. Continúe e inserte todos los comentarios que desee. Luego, canalícelo a través de JSMin antes de entregárselo a su analizador JSON. -Douglas Crockford, 2012

Esperemos que esto sea útil para aquellos que no están de acuerdo con por qué JSON.minify() podría ser útil.

Kyle Simpson avatar Jun 23 '2010 18:06 Kyle Simpson

Los comentarios se eliminaron de JSON por diseño.

Eliminé los comentarios de JSON porque vi que la gente los usaba 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 ser así.

Suponga que está utilizando JSON para guardar archivos de configuración que le gustaría anotar. Continúe e inserte todos los comentarios que desee. Luego, canalícelo a través de JSMin antes de entregárselo a su analizador JSON.

Fuente: Declaración pública de Douglas Crockford sobre G+

Artur Czajka avatar Jun 11 '2012 08:06 Artur Czajka

JSON no admite comentarios. Tampoco se pensó que fuera utilizado para archivos de configuración donde se necesitarían comentarios.

Hjson es un formato de archivo de configuración para humanos. Sintaxis relajada, menos errores, más comentarios.

Introducción a Hjson

Consulte hjson.github.io para obtener bibliotecas de JavaScript, Java, Python, PHP, Rust, Go, Ruby, C++ y C#.

laktak avatar Mar 20 '2014 15:03 laktak

DESCARGO DE RESPONSABILIDAD: SU GARANTÍA ES NULA

Como se ha señalado, este truco aprovecha la implementación de la especificación. No todos los analizadores JSON entenderán este tipo de JSON. Los analizadores de streaming en particular se atascarán.

Es una curiosidad interesante, pero realmente no deberías utilizarla para nada en absoluto . A continuación se muestra la respuesta original.


Encontré un pequeño truco que le permite colocar comentarios en un archivo JSON que no afectará el análisis ni alterará los datos que se representan de ninguna manera.

Parece que al declarar un objeto literal puedes especificar dos valores con la misma clave, y el último tiene prioridad. Lo creas o no, resulta que los analizadores JSON funcionan de la misma manera. Entonces podemos usar esto para crear comentarios en el JSON de origen que no estarán presentes en una representación de objeto analizado.

({a: 1, a: 2});
// => Object {a: 2}
Object.keys(JSON.parse('{"a": 1, "a": 2}')).length; 
// => 1

Si aplicamos esta técnica, su archivo JSON comentado podría verse así:

{
  "api_host" : "The hostname of your API server. You may also specify the port.",
  "api_host" : "hodorhodor.com",

  "retry_interval" : "The interval in seconds between retrying failed API calls",
  "retry_interval" : 10,

  "auth_token" : "The authentication token. It is available in your developer dashboard under 'Settings'",
  "auth_token" : "5ad0eb93697215bc0d48a7b69aa6fb8b",

  "favorite_numbers": "An array containing my all-time favorite numbers",
  "favorite_numbers": [19, 13, 53]
}

El código anterior es JSON válido . Si lo analizas, obtendrás un objeto como este:

{
    "api_host": "hodorhodor.com",
    "retry_interval": 10,
    "auth_token": "5ad0eb93697215bc0d48a7b69aa6fb8b",
    "favorite_numbers": [19,13,53]
}

Lo que significa que no hay rastro de los comentarios y no tendrán efectos secundarios extraños.

¡Feliz pirateo!

p3drosola avatar Aug 02 '2013 13:08 p3drosola