comments récupérer - Les commentaires peuvent-ils être utilisés dans JSON?




données français (25)

Puis-je utiliser des commentaires dans un fichier JSON? Si c'est le cas, comment?


Answers

Pensez à utiliser YAML. C'est presque un sur-ensemble de JSON (pratiquement tout le JSON valide est valide au format YAML) et autorise les commentaires.


Désolé, nous ne pouvons pas utiliser de commentaires dans JSON ... Consultez le diagramme de syntaxe pour JSON sur JSON.org .

Douglas Crockford explique " plus.google.com/118095276221607585885/posts/RK8qyGVaGSr ":

J'ai supprimé les commentaires de JSON parce que je voyais des personnes les utiliser pour conserver des directives d'analyse syntaxique, une pratique qui aurait détruit l'interopérabilité. Je sais que le manque de commentaires rend certaines personnes tristes, mais cela ne devrait pas.

Supposons que vous utilisiez JSON pour conserver les fichiers de configuration que vous souhaitez annoter. Allez-y et insérez tous les commentaires que vous aimez. Puis transmettez-le à JSMin avant de le remettre à votre analyseur JSON.


Tu ne peux pas. JSON.org moins, c’est mon expérience d’un coup d’œil rapide à JSON.org .

JSON a sa syntaxe visualisée sur cette page. Il n'y a pas de note sur les commentaires.


Vous pouvez avoir des commentaires en JSONP , mais pas en JSON pur. Je viens de passer une heure à essayer de faire fonctionner mon programme avec cet exemple de Highcharts: http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=?

Si vous suivez le lien, vous verrez

?(/* AAPL historical OHLC data from the Google Finance API */
[
/* May 2006 */
[1147651200000,67.79],
[1147737600000,64.98],
...
[1368057600000,456.77],
[1368144000000,452.97]
]);

Comme j'avais un fichier similaire dans mon dossier local, il n'y avait pas de problème avec la stratégie Même origine , alors j'ai décidé d'utiliser du JSON pur ... et, bien sûr, un $.getJSONéchec en mode silencieux à cause des commentaires.

Finalement, je viens d'envoyer une requête HTTP manuelle à l'adresse ci-dessus et j'ai réalisé que le type de contenu était text/javascriptdepuis, eh bien, JSONP renvoie du code JavaScript pur. Dans ce cas, les commentaires sont autorisés . Mais mon application a renvoyé le type de contenu application/jsonet j'ai donc dû supprimer les commentaires.


LIMITATION DE RESPONSABILITÉ: VOTRE GARANTIE EST ANNULÉE

Comme il a été souligné, ce hack tire parti de la mise en œuvre de la spécification. Tous les analyseurs JSON ne comprendront pas ce type de JSON. Les parseurs en streaming vont s’étouffer.

C'est une curiosité intéressante, mais vous ne devriez vraiment pas l'utiliser pour quoi que ce soit . Voici la réponse originale.

J'ai trouvé un petit hack qui vous permet de placer des commentaires dans un fichier JSON sans affecter l'analyse ni de modifier les données représentées.

Il semble que lorsque vous déclarez un littéral d'objet, vous pouvez spécifier deux valeurs avec la même clé et la dernière est prioritaire. Croyez-le ou non, il s'avère que les analyseurs JSON fonctionnent de la même manière. Nous pouvons donc l'utiliser pour créer des commentaires dans le JSON source qui ne seront pas présents dans une représentation d'objet analysé.

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

Si nous appliquons cette technique, votre fichier JSON commenté 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 un code JSON valide . Si vous l'analysez, vous obtiendrez un objet comme celui-ci:

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

Ce qui signifie qu'il n'y a aucune trace des commentaires et qu'ils n'auront pas d'effets secondaires étranges.

Joyeux piratage!


Si vous utilisez la bibliothèque Newtonsoft.Json avec ASP.NET pour lire / désérialiser, vous pouvez utiliser des commentaires dans le contenu JSON:

// "nom": "chaîne"

// "id": int

ou

/* C'est un

exemple de commentaire * /

PS: Les commentaires sur une ligne ne sont pris en charge que par 6 versions ou plus de Newtonsoft Json.

Note supplémentaire pour les personnes qui ne peuvent pas penser à l’essentiel: j’utilise le format JSON pour les paramètres de base d’une application Web ASP.NET que j’ai créée. Je lis le fichier, le convertis en objet de configuration avec la bibliothèque Newtonsoft et l’utilise si nécessaire.

Je préfère écrire des commentaires sur chaque paramètre individuel dans le fichier JSON lui-même et je me moque totalement de l'intégrité du format JSON tant que la bibliothèque que j'utilise est en bon état.

Je pense que c'est un moyen "plus facile à utiliser / à comprendre" que de créer un fichier séparé "settings.README" et d'expliquer les paramètres qu'il contient.

Si vous avez un problème avec ce type d’utilisation; désolé, le génie est sorti de la lampe. Les gens trouveraient d’autres utilisations pour le format JSON, et vous ne pouvez rien y faire.


L'idée derrière JSON est de fournir un échange de données simple entre applications. Ce sont généralement basés sur le Web et la langue est JavaScript.

Cela n'autorise pas vraiment les commentaires en tant que tels, cependant, le fait de passer un commentaire comme une des paires nom / valeur dans les données fonctionnerait certainement, bien que ces données devraient évidemment être ignorées ou traitées spécifiquement par le code d'analyse syntaxique.

Cela dit, le fichier JSON ne doit pas contenir de commentaires au sens traditionnel. Ce ne devrait être que les données.

Consultez le site Web JSON pour plus de détails.


Cela dépend de votre bibliothèque JSON. Json.NET prend en charge les commentaires de style JavaScript /* commment */.

Voir une autre question de débordement de pile .


L'auteur de JSON souhaite que nous incluions des commentaires dans le JSON, mais les supprimions avant de les analyser (voir le plus.google.com/118095276221607585885/posts/RK8qyGVaGSr fourni par Michael Burr). Si JSON doit avoir des commentaires, pourquoi ne pas les normaliser et laisser l’analyseur JSON faire le travail? Je ne suis pas d'accord avec la logique, mais, hélas, c'est la norme. Utiliser une solution YAML comme suggéré par d'autres est une bonne chose, mais cela nécessite une dépendance à la bibliothèque.

Si vous souhaitez supprimer les commentaires, mais ne pas créer de dépendance à la bibliothèque, voici une solution à deux lignes, qui fonctionne pour les commentaires de style C ++, mais qui peut être adaptée à d'autres:

var comments = new RegExp("//.*", 'mg');
data = JSON.parse(fs.readFileSync(sample_file, 'utf8').replace(comments, ''));

Notez que cette solution ne peut être utilisée que dans les cas où vous pouvez être sûr que les données JSON ne contiennent pas l'initiateur de commentaire, par exemple ('//').

Une autre façon de réaliser l'analyse JSON, la suppression de commentaires et l'absence de bibliothèque supplémentaire, consiste à évaluer le JSON dans un interpréteur JavaScript. La mise en garde avec cette approche, bien sûr, est que vous souhaitez uniquement évaluer des données non corrompues (aucune entrée utilisateur non fiable). Voici un exemple de cette approche dans Node.js - autre mise en garde: l'exemple suivant ne lira les données qu'une seule fois, puis sera mis en cache:

data = require(fs.realpathSync(doctree_fp));

Si votre fichier texte, qui est une chaîne JSON, va être lu par un programme, serait-il difficile de supprimer les commentaires de style C ou C ++ avant de l'utiliser?

Réponse: Ce serait un one-line. Si vous le faites, les fichiers JSON peuvent être utilisés comme fichiers de configuration.


JSON ne prend pas en charge les commentaires. De plus, il n’a jamais été prévu d’utiliser les fichiers de configuration pour lesquels des commentaires seraient nécessaires.

Hjson est un format de fichier de configuration pour les humains. Syntaxe détendue, moins d'erreurs, plus de commentaires.

Consultez hjson.org pour les bibliothèques JavaScript, Java, Python, PHP, Rust, Go, Ruby et C #.


Non.

Le JSON doit tous être des données, et si vous incluez un commentaire, il s'agira également de données.

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

Il serait probablement préférable d’avoir le commentaire dans les processus qui génèrent / reçoivent le JSON, car ils sont supposés savoir ce que les données JSON seront à l’avance, ou du moins leur structure.

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

Ceci est une question "pouvez-vous" . Et voici une réponse "oui" .

Non, vous ne devez pas utiliser de membre d'objet duplicatif pour insérer des données de canal latéral dans un codage JSON. (Voir "Les noms dans un objet DEVRAIENT être uniques" dans le RFC ).

Et oui, vous pouvez insérer des commentaires autour du JSON , que vous pouvez analyser.

Mais si vous souhaitez insérer et extraire des données de canaux secondaires arbitraires dans un JSON valide, voici une réponse. Nous tirons parti de la représentation non unique des données dans un codage JSON. Ceci est autorisé * dans la section deux du RFC sous "les espaces sont autorisés avant ou après l'un des six caractères structurels".

* La RFC indique uniquement "les espaces sont autorisés avant ou après l'un des six caractères structurels", sans mentionner explicitement les chaînes, les nombres, "false", "true" et "null". Cette omission est ignorée dans TOUTES les implémentations.

Tout d’abord, canonisez votre JSON en le réduisant:

$jsonMin = json_encode(json_decode($json));

Puis encodez votre commentaire en binaire:

$hex = unpack('H*', $comment);
$commentBinary = base_convert($hex[1], 16, 2);

Puis steg votre binaire:

$steg = str_replace('0', ' ', $commentBinary);
$steg = str_replace('1', "\t", $steg);

Voici votre sortie:

$jsonWithComment = $steg . $jsonMin;

Pour couper un élément JSON en plusieurs parties, j'ajoute des lignes de type "commentaire factice":

{

"#############################" : "Part1",

"data1"             : "value1",
"data2"             : "value2",

"#############################" : "Part2",

"data4"             : "value3",
"data3"             : "value4"

}

Le toolkit JavaScript de Dojo Toolkit (au moins à partir de la version 1.4) vous permet d'inclure des commentaires dans votre JSON. Les commentaires peuvent être de /* */format. Dojo Toolkit utilise le JSON via l' dojo.xhrGet()appel.

D'autres toolkits JavaScript peuvent fonctionner de la même manière.

Cela peut être utile lorsque vous expérimentez d'autres structures de données (ou même des listes de données) avant de choisir une option finale.


Si vous utilisez JSON5 vous pouvez inclure des commentaires.

JSON5 est une extension proposée à JSON qui vise à faciliter la rédaction et la maintenance manuelles à la main. Pour ce faire, il ajoute des fonctionnalités de syntaxe minimale directement à partir de ECMAScript 5.


Il y a une bonne solution (hack), qui est un JSON valide. Il suffit de faire la même clé deux fois (ou plus). Par exemple:

{
  "param" : "This is the comment place",
  "param" : "This is value place",
}

Donc, JSON comprendra ceci comme:

{
  "param" : "This is value place",
}

Non , les commentaires de la forme //… ou /*…*/ ne sont pas autorisés en JSON. Cette réponse est basée sur:

  • http://www.json.org
  • RFC 4627 : type de média application/json pour la notation d'objet JavaScript (JSON)
  • RFC 7159 Format d'échange de données Notation d'objet JavaScript (JSON) - Obsolètes: 4627, 7158

Vous devriez plutôt écrire un schéma JSON . Le schéma JSON est actuellement un projet de spécification Internet. Outre la documentation, le schéma peut également être utilisé pour valider vos données JSON.

Exemple:

{
    "description":"A person",
    "type":"object",
    "properties":
        {
            "name":
                {
                    "type":"string"
                },
            "age":
                {
                    "type":"integer",
                    "maximum":125
                }
        }
}

Vous pouvez fournir de la documentation en utilisant l'attribut de schéma de description .


Voici ce que j'ai trouvé dans la documentation de Google Firebase qui vous permet de mettre des commentaires en JSON:

{
  "//": "Some browsers will use this to enable push notifications.",
  "//": "It is the same for all projects, this is not your project's sender ID",
  "gcm_sender_id": "1234567890"
}

JSON ne prend pas en charge les commentaires de manière native, mais vous pouvez créer votre propre décodeur ou au moins un préprocesseur pour effacer les commentaires, c'est très bien (tant que vous ignorez simplement les commentaires et ne les utilisez pas pour guider la manière dont votre application doit traiter les données JSON. ).

JSON n'a pas de commentaires. Un encodeur JSON NE DOIT PAS produire de commentaires. Un décodeur JSON PEUT accepter et ignorer les commentaires.

Les commentaires ne doivent jamais être utilisés pour transmettre quelque chose de significatif. C'est à cela que sert JSON.

Cf: Douglas Crockford, auteur de JSON spec .


Les commentaires ont été supprimés de JSON par conception.

J'ai supprimé les commentaires de JSON parce que je voyais des personnes les utiliser pour conserver des directives d'analyse syntaxique, une pratique qui aurait détruit l'interopérabilité. Je sais que le manque de commentaires rend certaines personnes tristes, mais cela ne devrait pas.

Supposons que vous utilisiez JSON pour conserver les fichiers de configuration que vous souhaitez annoter. Allez-y et insérez tous les commentaires que vous aimez. Puis transmettez-le à JSMin avant de le remettre à votre analyseur JSON.

Source: plus.google.com/118095276221607585885/posts/RK8qyGVaGSr


Nous utilisons strip-json-commentspour notre projet. Il supporte quelque chose comme:

/*
 * Description 
*/
{
    // rainbows
    "unicorn": /* ❤ */ "cake"
}

Simplement npm install --save strip-json-commentsinstaller et utiliser comme:

var strip_json_comments = require('strip-json-comments')
var json = '{/*rainbows*/"unicorn":"cake"}';
JSON.parse(strip_json_comments(json));
//=> {unicorn: 'cake'}

Inclure les commentaires si vous choisissez; éliminez-les avec un minifier avant de les analyser ou de les transmettre.

Je viens de publier JSON.minify() qui supprime les commentaires et les espaces d'un bloc de JSON et le rend valide JSON pouvant être analysé. Donc, vous pourriez l'utiliser comme:

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

Lorsque je l'ai publié, j'ai reçu une réaction violente en me disant que je devais écrire un article de blog complet expliquant pourquoi les commentaires ont du sens dans JSON . Il comprend ce commentaire notable du créateur de JSON:

Supposons que vous utilisiez JSON pour conserver les fichiers de configuration que vous souhaitez annoter. Allez-y et insérez tous les commentaires que vous aimez. Puis transmettez-le à JSMin avant de le remettre à votre analyseur JSON. - plus.google.com/118095276221607585885/posts/RK8qyGVaGSr

J'espère que cela sera utile à ceux qui ne sont pas d'accord avec la raison pour laquelle JSON.minify () pourrait être utile.


"Ultra JSON" ou simplement "ujson" peut gérer avoir [] dans votre fichier JSON. Si vous lisez un fichier d'entrée JSON dans votre programme sous la forme d'une liste d'éléments JSON; comme, [{[{}]}, {}, [], etc...] ujson peut gérer n'importe quel ordre arbitraire de listes de dictionnaires, de dictionnaires de listes.

Vous pouvez trouver ujson dans l' index du paquet Python et l'API est presque identique à la bibliothèque json intégrée de Python.

ujson est également beaucoup plus rapide si vous chargez des fichiers JSON plus volumineux. Vous pouvez voir les détails de performance en comparaison avec d'autres bibliothèques Python JSON dans le même lien fourni.







json comments