Domanda I commenti possono essere usati in JSON?


Posso usare commenti all'interno di un file JSON? Se é cosi, come?


5775
2017-10-28 20:39


origine


risposte:


No.

I JSON dovrebbero essere tutti dati e, se includi un commento, saranno anche i dati.

Potresti avere un elemento dati designato chiamato "_comment" (o qualcosa) che verrebbe ignorato dalle app che usano i dati JSON.

Probabilmente sarebbe meglio avere il commento nei processi che genera / riceve il JSON, poiché si suppone che sappiano quali saranno i dati JSON in anticipo o almeno la loro struttura.

Ma se hai deciso di:

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

4046
2017-10-28 21:01



No , commenti del modulo //… o /*…*/ non sono consentiti in JSON. Questa risposta è basata su:

  • http://www.json.org
  • RFC 4627 : Il application/json Tipo di supporto per JavaScript Object Notation (JSON)
  • RFC 7159  Formato di interscambio dati JSON (JavaScript Object Notation) - Obsoletes: 4627, 7158

1564
2017-11-15 09:32



Includere i commenti se si sceglie; spogliarli con un minificatore prima di analizzare o trasmettere.

Ho appena rilasciato JSON.minify ()  che rimuove i commenti e gli spazi bianchi da un blocco di JSON e lo rende valido JSON che può essere analizzato. Quindi, potresti usarlo come:

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

Quando l'ho rilasciato, ho avuto un enorme contraccolpo di persone che non erano d'accordo nemmeno con l'idea, così ho deciso di scrivere un post completo sul perché i commenti hanno senso in JSON . Include questo commento notevole del creatore di JSON:

Supponiamo che tu stia usando JSON per mantenere i file di configurazione, che vorresti annotare. Vai avanti e inserisci tutti i commenti che ti piacciono. Quindi collegalo a JSMin prima di passarlo al parser JSON. - Douglas Crockford, 2012

Speriamo che sia utile a coloro che non sono d'accordo con il perché JSON.minify ()  potrebbe essere utile


676
2018-06-23 18:20



I commenti sono stati rimossi da JSON in base alla progettazione.

Ho rimosso i commenti da JSON perché vedevo che le persone li utilizzavano per contenere direttive di analisi, una pratica che avrebbe distrutto l'interoperabilità. So che la mancanza di commenti rende alcune persone tristi, ma non dovrebbe.

Supponiamo che tu stia usando JSON per mantenere i file di configurazione, che vorresti annotare. Vai avanti e inserisci tutti i commenti che ti piacciono. Quindi collegalo a JSMin prima di passarlo al parser JSON.

Fonte: Dichiarazione pubblica di Douglas Crockford su G +


377
2018-06-11 08:52



DICHIARAZIONE DI NON RESPONSABILITÀ: LA VOSTRA GARANZIA È ANNULLATA

Come è stato sottolineato, questo hack sfrutta l'implementazione delle specifiche. Non tutti i parser JSON comprenderanno questo tipo di JSON. In particolare i parser di streaming soffocheranno.

È una curiosità interessante, ma tu dovrebbe davvero non usarlo per niente . Di seguito è la risposta originale.


Ho trovato un piccolo trucco che consente di inserire commenti in un file JSON che non influirà sull'analisi o alterare i dati rappresentati in alcun modo.

Sembra che quando si dichiara un oggetto letterale è possibile specificare due valori con la stessa chiave, e l'ultimo ha la precedenza. Che ci crediate o no, risulta che i parser JSON funzionano allo stesso modo. Quindi possiamo usarlo per creare commenti nel JSON di origine che non sarà presente in una rappresentazione oggetto parsed.

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

Se applichiamo questa tecnica, il tuo file JSON commentato potrebbe assomigliare a questo:

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

Il codice sopra è JSON valido . Se lo analizzi, otterrai un oggetto come questo:

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

Il che significa che non c'è traccia dei commenti e che non avranno effetti collaterali strani.

Happy hacking!


192
2017-08-02 13:46



JSON non supporta i commenti. Inoltre, non è mai stato concepito per i file di configurazione in cui sarebbero necessari commenti.

Hjson è un formato di file di configurazione per gli esseri umani. Sintassi rilassata, meno errori, più commenti.

Hjson intro

Vedere hjson.org  per le librerie JavaScript, Java, Python, PHP, Rust, Go, Ruby e C #.


123
2018-03-20 15:26



Non puoi Almeno questa è la mia esperienza da una rapida occhiata a json.org .

JSON ha la sua sintassi visualizzata su quella pagina. Non c'è nessuna nota sui commenti.


95
2017-10-28 20:42



Prendi in considerazione l'utilizzo di YAML. È quasi un superset di JSON (praticamente tutto JSON valido è YAML valido) e consente commenti.


86
2017-08-31 02:24



Dovresti scrivere a Schema JSON  anziché. Lo schema JSON è attualmente una proposta di bozza di specifiche Internet. Oltre alla documentazione, lo schema può essere utilizzato anche per convalidare i dati JSON.

Esempio:

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

È possibile fornire documentazione utilizzando il descrizione  attributo schema


55
2017-07-28 18:38



Se stai usando Jackson  come parser JSON, questo è il modo in cui lo abiliti per consentire i commenti:

ObjectMapper mapper = new ObjectMapper().configure(Feature.ALLOW_COMMENTS, true);   

Quindi puoi avere commenti come questo:

{
  key: "value" // comment
}

E puoi anche avere commenti che iniziano con # IMPOSTANDO:

mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);    

Ma in generale (come risposta prima) la specifica non consente commenti.


51
2018-02-06 20:44