8311 votes

Puis-je commenter un fichier JSON?

Puis-je commenter un fichier JSON? Si oui, comment?

6173voto

Eli Points 14599

Je ne crois pas que vous pouvez avoir un réel commentaire. Le JSON devraient être données, et si vous avez un commentaire, il sera de données.

Vous pourriez avoir désigné un élément de données appelée "_comment" (ou quelque chose) qui sera ignoré par les applications qui utilisent les données json.

Vous serait probablement mieux d'avoir le commentaire dans le processus qui génèrent/recevoir le json, comme ils sont censés savoir ce que les données json seront à l'avance, ou au moins la structure de celle-ci.

Mais si vous avez décidé de...

{
   "_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"
            }
         }
      }
   }
}

1971voto

stakx Points 29832

Pas de, commentaires en JSON ne sont pas autorisés. Cette réponse est fondée sur:

893voto

Kyle Simpson Points 3800

Je viens juste de sortir de JSON.minifier() qui supprime les commentaires et les espaces à partir d'un bloc de JSON et rend JSON valide qui peut être analysé. Donc, vous pouvez l'utiliser comme:

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

Quand je l'ai sorti, j'ai eu une énorme réaction des gens en désaccord avec l'idée même d'elle, alors j'ai décidé que j'avais l'écriture d'un blog post sur pourquoi les commentaires de sens que dans JSON.

J'espère que c'est utile pour ceux qui sont en désaccord avec la raison de JSON.minifier() pourrait être utile.

493voto

Artur Czajka Points 3327

Des commentaires ont été retirés de JSON par la conception.

J'ai supprimé les commentaires de JSON, car j'ai vu des gens ont été en utilisant à procéder à l'analyse des directives, une pratique qui aurait détruit l'interopérabilité. Je sais que le manque de commentaires de certaines personnes triste, mais il ne devrait pas.

Supposons que vous êtes en utilisant JSON pour garder les fichiers de configuration que vous souhaitez annoter. Aller de l'avant et insérez tous les commentaires que vous le souhaitez. Puis il pipe par JSMin avant de les remettre à votre parser JSON.

Source: déclaration Publique par Douglas Crockford sur G+

224voto

Ped Points 1981

J'ai trouvé un petit hack qui vous permet de placer des commentaires dans un fichier JSON qui n'affectera pas l'analyse, ou modifier les données représentées en aucune façon.

Il semble que lors de la déclaration d'un objet littéral, vous pouvez spécifier deux valeurs avec la même clé, et le dernier l'emporte. Croyez le ou non, il s'avère JSON analyseurs de la même façon. Nous pouvons donc utiliser cette fonction pour créer des commentaires dans le source JSON qui ne seront pas présents dans analysé la représentation des objets.

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

Si nous appliquons cette technique, votre commenté fichier JSON pourrait ressembler à ceci:

{
  "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]
}

Le code ci-dessus est valable JSON. Si vous analyser vous obtiendrez un objet comme ceci:

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

Ce qui signifie qu'il n'existe aucune trace des commentaires, et ils n'ont pas bizarre d'effets secondaires.

Happy hacking!


Mise à JOUR:

Comme cela a été souligné, ce hack prend avantage d'une certaine ambiguïté dans la spec. Pas tous JSON analyseurs permettra de comprendre ce genre de JSON. Streaming analyseurs, en particulier, peuvent s'étouffer.

Donc, vous ne devriez pas l'utiliser sans la compréhension de votre environnement, par exemple: qui analyseurs seront impliqués. Si vous êtes juste de l'utiliser dans le navigateur, ou avec node.js vous êtes fine.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X