Vraag Kunnen opmerkingen worden gebruikt in JSON?


Kan ik opmerkingen in een JSON-bestand gebruiken? Zo ja, hoe?


5777
2017-10-28 20:39


oorsprong


antwoorden:


Nee.

De JSON moeten allemaal gegevens zijn en als u een opmerking toevoegt, zijn het ook gegevens.

U zou een aangewezen gegevenselement kunnen hebben met de naam "_comment" (of iets) dat zou worden genegeerd door apps die de JSON-gegevens gebruiken.

Het is waarschijnlijk beter om de opmerking te plaatsen in de processen die de JSON genereren / ontvangen, omdat ze moeten weten wat de JSON-gegevens van tevoren zullen zijn, of op zijn minst de structuur ervan.

Maar als je hebt besloten om:

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

4047
2017-10-28 21:01



Nee, opmerkingen van het formulier //… of /*…*/ zijn niet toegestaan ​​in JSON. Dit antwoord is gebaseerd op:

  • http://www.json.org
  • RFC 4627: De application/json Mediatype voor JavaScript Object Notation (JSON)
  • RFC 7159 Het JavaScript Object Notation (JSON) Data Interchange Format - Obsoletes: 4627, 7158

1566
2017-11-15 09:32



Voeg opmerkingen toe als u ervoor kiest; strip ze uit met een mijnwerker voor het ontleden of verzenden.

Ik heb net vrijgegeven JSON.minify () die opmerkingen en witruimte uit een blok JSON verwijdert en JSON maakt die kan worden geparseerd. Dus je zou het kunnen gebruiken als:

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

Toen ik het uitbracht, kreeg ik een enorme terugslag van mensen die het zelfs niet eens waren met het idee ervan, dus besloot ik dat ik een uitgebreide blogpost zou schrijven over waarom opmerkingen zijn logisch in JSON. Het bevat deze opmerkelijke opmerking van de maker van JSON:

Stel dat u JSON gebruikt om configuratiebestanden bij te houden, waarvan u een annotatie wilt maken. Ga je gang en plaats alle opmerkingen die je leuk vindt. Leid het vervolgens door JSMin voordat u het aan uw JSON-parser geeft. - Douglas Crockford, 2012

Hopelijk is dat nuttig voor degenen die het niet eens zijn met het waarom JSON.minify () kan nuttig zijn.


677
2018-06-23 18:20



Opmerkingen zijn bij ontwerp van JSON verwijderd.

Ik verwijderde opmerkingen van JSON omdat ik zag dat mensen ze gebruikten om parseerrichtlijnen vast te houden, een praktijk die de interoperabiliteit zou hebben vernietigd. Ik weet dat het gebrek aan opmerkingen sommige mensen verdrietig maakt, maar dat zou niet moeten gebeuren.

Stel dat u JSON gebruikt om configuratiebestanden bij te houden, waarvan u een annotatie wilt maken. Ga je gang en plaats alle opmerkingen die je leuk vindt. Leid het vervolgens door JSMin voordat u het aan uw JSON-parser geeft.

Bron: Openbare verklaring van Douglas Crockford op G +


378
2018-06-11 08:52



DISCLAIMER: UW GARANTIE IS NIETIG

Zoals is opgemerkt, maakt deze hack gebruik van de implementatie van de spec. Niet alle JSON-parsers zullen dit soort JSON begrijpen. Vooral streaming-parsers zullen stikken.

Het is een interessante nieuwsgierigheid, maar jij zou het echt helemaal niet moeten gebruiken. Hieronder staat het oorspronkelijke antwoord.


Ik heb een kleine hack gevonden waarmee je opmerkingen in een JSON-bestand kunt plaatsen die de parsering niet beïnvloeden, of die de op welke manier dan ook gerepresenteerde gegevens wijzigen.

Het lijkt erop dat wanneer u een object letterlijk declareert, u twee waarden kunt opgeven met dezelfde sleutel, en de laatste heeft voorrang. Geloof het of niet, het blijkt dat JSON-parsers op dezelfde manier werken. We kunnen dit dus gebruiken om opmerkingen in de bron JSON te maken die niet aanwezig zijn in een geparseerde objectrepresentatie.

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

Als we deze techniek toepassen, ziet uw gemarkeerde JSON-bestand er als volgt uit:

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

De bovenstaande code is geldige JSON. Als je het parseert, krijg je een object als dit:

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

Wat betekent dat er geen spoor van de opmerkingen is en dat ze geen rare bijwerkingen zullen hebben.

Veel plezier met hacken!


192
2017-08-02 13:46



JSON ondersteunt geen opmerkingen. Het was ook nooit bedoeld om te worden gebruikt voor configuratiebestanden waar opmerkingen nodig zouden zijn.

Hjson is een configuratie-bestandsformaat voor mensen. Ontspannen syntaxis, minder fouten, meer reacties.

Hjson intro

Zien hjson.org voor JavaScript, Java, Python, PHP, Rust, Go, Ruby en C # -bibliotheken.


123
2018-03-20 15:26



Dat kan niet. Dat is tenminste mijn ervaring vanuit een snelle blik op json.org.

JSON heeft zijn syntaxis gevisualiseerd op die pagina. Er is geen opmerking over opmerkingen.


95
2017-10-28 20:42



Overweeg om YAML te gebruiken. Het is bijna een superset van JSON (vrijwel alle geldige JSON is geldig YAML) en het maakt opmerkingen mogelijk.


86
2017-08-31 02:24



Je moet een schrijven JSON-schema in plaats daarvan. JSON-schema is momenteel een voorgestelde internetscriptspecificatie. Naast documentatie kan het schema ook worden gebruikt voor het valideren van uw JSON-gegevens.

Voorbeeld:

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

U kunt documentatie verstrekken met behulp van de Beschrijving schema-attribuut.


55
2017-07-28 18:38