Pot folosi comentarii în interiorul unui fișier JSON? Dacă da, cum?
Nr.
JSON ar trebui să fie toate datele, și dacă includeți un comentariu, apoi vor fi date prea.
Ai putea avea desemnat un element de date numit"_comment"` (sau ceva) care ar fi ignorate de aplicații care utilizează date JSON.
Tu, probabil, ar fi mai bine având comentariu în procesele care generează/primește JSON, ca ele ar trebui să știe ce date JSON va fi în avans, sau cel puțin structura acestuia.
Dar dacă te-ai decis să:
{
"_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"
}
}
}
}
}
Nu, comentarii de forma / / ... " sau " / * ... * /
nu sunt permise în JSON. Acest răspuns se bazează pe:
application/json
Tipul de suport pentru JavaScript Object Notation (JSON)Include comentarii dacă alegeți; benzi-le cu un minifier înainte de parsare sau transmiterea.
Tocmai am lansat JSON.minify() care benzi comentarii și spațiu dintr-un bloc de JSON și face JSON valid, care poate fi analizat. Deci, s-ar putea folosi, cum ar fi:
JSON.parse(JSON.minify(my_str));
Când l-am lansat, am o mare reacție de oameni de acord cu ideea asta, așa că am decis'd scrie un cuprinzător post pe blog de ce comentarii sens în JSON. Acesta include acest notabile comentariu de la creatorul de JSON:
să Presupunem că sunteți folosind JSON pentru a păstra fișierele de configurare, pe care le-ar dori pentru a adnota. Du-te mai departe și de a introduce toate comentariile vă place. Apoi țeavă prin JSMin înainte să-l dau la JSON parser. - Douglas Crockford, 2012
Sperăm că's util pentru cei care nu sunt de acord cu ce JSON.minify() ar putea fi utile.
Comentarii au fost eliminate de la JSON de design.
am eliminat comentariile de la JSON pentru că am văzut oameni au fost folosindu-le pentru a ține parsarea directive, o practică care ar fi distrus de interoperabilitate. Știu că lipsa de comentarii face pe unii oameni triști, dar nu ar trebui't.
să Presupunem că sunteți folosind JSON pentru a păstra fișierele de configurare, pe care le-ar dori pentru a adnota. Du-te mai departe și de a introduce toate comentariile vă place. Apoi țeavă prin JSMin înainte să-l dau la JSON parser.
DISCLAIMER: DE GARANȚIE ESTE NULĂ
Cum s-a arătat, acest hack are avantajul de a punerea în aplicare a spec. Nu toate JSON interpretoare va înțelege acest fel de JSON. Streaming interpretoare, în special, va sufoca.
L's un interesant curiozitatea, dar tu într-adevăr nu ar trebui să fie folosind-o pentru nimic, la toate. Mai jos este original răspuns.
Am'am găsit un mic hack care vă permite de a plasa comentarii într-un fișier JSON, care nu va afecta parsarea, sau să modifice datele fiind reprezentate în nici un fel.
Se pare că atunci când se declară un obiect literal puteți specifica două valori cu aceeași cheie, iar ultima are prioritate. Crezi sau nu, se pare că JSON interpretoare funcționează în același mod. Deci, putem folosi acest lucru pentru a crea comentarii în sursa JSON că nu va fi prezent într-un obiect analizat de reprezentare.
({a: 1, a: 2});
// => Object {a: 2}
Object.keys(JSON.parse('{"a": 1, "a": 2}')).length;
// => 1
Dacă vom aplica această tehnică, ta comentat fișier JSON ar putea arata astfel:
{
"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]
}
Codul de mai sus este JSON valid. Dacă ai analiza-o, te'll a obține un astfel de obiect:
{
"api_host": "hodorhodor.com",
"retry_interval": 10,
"auth_token": "5ad0eb93697215bc0d48a7b69aa6fb8b",
"favorite_numbers": [19,13,53]
}
Ceea ce înseamnă că nu există nici o urmă de comentarii, și-au câștigat't fi ciudat efecte secundare.
Fericit hacking!
JSON nu acceptă comentarii. De asemenea a fost niciodată destinat să fie utilizat pentru fișierele de configurare în cazul în care comentariile vor fi necesare.
Hjson este un fișier de configurare format pentru oameni. Relaxat sintaxa, mai puține greșeli, mai multe comentarii.
A se vedea hjson.org pentru JavaScript, Java, Python, PHP, Rugina, Du-te, Ruby și C# biblioteci.
Ar trebui să scrii o JSON schema în loc. JSON schema este în prezent o propunere de Internet proiectul de caiet de sarcini. În afară de documentare, schema poate fi de asemenea utilizat pentru validarea de date JSON.
Exemplu:
{
"description":"A person",
"type":"object",
"properties":
{
"name":
{
"type":"string"
},
"age":
{
"type":"integer",
"maximum":125
}
}
}
Puteți furniza documentația prin utilizarea descriere schema atribut.
Dacă utilizați Jackson ca JSON parser-ul, atunci acest lucru este cum ai posibilitatea de a permite comentarii:
ObjectMapper mapper = new ObjectMapper().configure(Feature.ALLOW_COMMENTS, true);
Apoi, puteți avea comentarii de genul asta:
{
key: "value" // Comment
}
Și puteți avea, de asemenea, comentarii care încep cu #
prin stabilirea:
mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);
Dar, în general (ca răspuns înainte de a) caietul de sarcini nu permite comentarii.
Comentariile nu sunt un standard oficial. Deși unele interpretoare de sprijin C-stil de comentarii. Unul pe care îl folosesc este JsonCpp. În exemplele de acolo este aceasta:
// Configuration options
{
// Default encoding for text
"encoding" : "UTF-8",
// Plug-ins loaded at start-up
"plug-ins" : [
"python",
"c++",
"ruby"
],
// Tab indent size
"indent" : { "length" : 3, "use_space": true }
}
jsonlint nu validează acest lucru. Deci comentariile sunt de un parser extensie specifică și nu standard.
Un alt parser este JSON5.
O alternativă la JSON TOML.
O altă alternativă este jsonc.
Aici este ceea ce am găsit în Google Baza documentatiei, care vă permite de a pune comentarii în 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"
}
Dacă fișierul text, care este un șir JSON, va fi citit de program, cât de dificil ar fi să se dezbrace, fie C sau C++ stil comentarii înainte de a o folosi?
Răspuns: va fi o singură linie. Dacă faci asta, atunci fișiere JSON ar putea fi folosit ca fișierele de configurare.
Dacă utilizați Newtonsoft.Json bibliotecă cu ASP.NET pentru a citi/deserialize puteți utiliza comentarii în JSON conținut:
//"nume": "string"
//"id": int
sau
/* Acesta este un
comentariu exemplu */
PS: Single-line comentarii sunt acceptate doar cu 6+ versiuni de Newtonsoft Json.
Notă suplimentară pentru persoanele care pot't cred că afară de la cutie: nu utilizați formatul JSON pentru setările de bază într-un ASP.NET aplicație web am făcut. I-am citit dosarul, îl transformă în setările obiect cu Newtonsoft bibliotecă și să-l utilizați atunci când este necesar.
Prefer să scriu comentarii despre fiecare setare în fișierul JSON în sine, și chiar nu - 't pasă de integritatea format JSON atâta timp cât biblioteca folosesc este OK cu ea.
Cred că aceasta este o 'mai ușor de utilizat/înțelege' mod decât crearea unei separate 'setări.README' de fișier și explicarea setări în ea.
Dacă aveți o problemă cu acest tip de utilizare; îmi pare rău, duhul a ieșit din lampă. Oamenii ar găsi alte utilizări pentru format JSON, și nu există nimic care le puteți face despre el.
Ideea din spatele JSON este de a oferi simplu schimb de date între aplicații. Acestea sunt de obicei bazate pe web și limba este JavaScript.
Nu't într-adevăr permite comentarii ca atare, cu toate acestea, trecerea la un comentariu ca una dintre perechi nume/valoare la date va lucra cu siguranță, deși datele va trebui, evident, să fie ignorate sau tratate în mod special de către codul de parsare.
Tot ce a spus, l's nu intenția ca JSON fișier ar trebui să conțină comentarii în sens tradițional. Ar trebui să fie doar datele.
Avea o privire de la JSON-ul pentru mai multe detalii.
Am confruntă cu această pentru fișiere de configurare. Eu nu't doriți să utilizați XML (verbose, grafic, urât, greu de citit), sau "ini" format (nici ierarhie, nici real, standard, etc.) sau Java "Proprietăți" format (cum ar fi .ini).
JSON poate face tot ce pot face, dar este mult mai detaliată și mai lizibil - și interpretoare sunt ușor și omniprezent în mai multe limbi. L's doar un copac de date. Dar out-of-band comentarii sunt o necesitate de multe ori la documente "default" configurații și cum ar fi. Configurații nu sunt niciodată să fie "full documente", dar copacii din datele salvate care poate fi citită de om atunci când este necesar.
Cred că unul ar putea-o folosi"#": "nota" pentru "valabil" JSON.
JSON nu acceptă comentarii nativ, dar puteți face propriile decoder sau cel puțin preprocesor să se dezbrace comentarii, ca's perfect (cât timp ai ignora comentariile și don't să le utilizeze pentru a ghida modul de aplicare ar trebui să proceseze date JSON).
JSON nu are comentarii. Un JSON encoder NU TREBUIE să ieșire comentarii. Un alt decoder POATE accepta și de a ignora comentarii.
Comentarii nu ar trebui să fie utilizate pentru a transmite ceva semnificativ. Care este ce JSON este pentru.
JSON face o mulțime de sens pentru fișiere de configurare și alte locale de utilizare, deoarece's omniprezente și pentru că-l's mult mai simplu decât XML.
Dacă oamenii au motive puternice împotriva avea comentarii în JSON, atunci când comunicarea de date (indiferent dacă sunt sau nu valabile), apoi, eventual, JSON ar putea fi împărțită în două:
JSON-DOC va permite comentarii, și alte diferențe minore ar putea exista, cum ar fi manipularea spațiu. Interpretoare poate converti cu ușurință de la un spec la altul.
În ceea ce privește remarca făcută de Douglas Crockford asupra acestei probleme (referite de @Artur Czajka)
să Presupunem că sunteți folosind JSON pentru a păstra fișierele de configurare, pe care le-ar dori pentru a adnota. Du-te mai departe și de a introduce toate comentariile vă place. Apoi țeavă prin JSMin înainte să-l dau la JSON parser.
Am're vorbesc despre un generic config problema (limba cruce/platforma), iar el's a răspunde cu un JS specifice de utilitate!
Sigur o JSON specifice minify poate fi implementat în orice limbă, dar standardizăm așa că devine omniprezent peste interpretoare în toate limbile și platforme, astfel încât oamenii nu mai pierde timpul lor lipsit de caracteristica pentru că au bune cazuri de utilizare pentru aceasta, privind problema în forumuri on-line, și de a face oamenii spunându-le că's o idee proastă sau sugerând's ușor să pună în aplicare de separare comentarii din fișiere text.
Altă problemă este interoperabilitatea. Să presupunem că aveți o bibliotecă sau API sau orice fel de subsistem care are un config sau fișiere de date asociate cu acesta. Și acest subsistem este pentru a fi accesate din diferite limbi. Apoi te duci despre a spune oamenilor: apropo don't uitați să se dezbrace în comentarii de fișiere JSON înainte de a trece-le la parser!
JSON utilizate pentru a sprijini comentarii, dar ele au fost abuzate și eliminate din standard.
De la creatorul de JSON:
am eliminat comentariile de la JSON pentru că am văzut oameni au fost folosindu-le pentru a ține parsarea directive, o practică care ar fi distrus de interoperabilitate. Știu că lipsa de comentarii face pe unii oameni triști, dar nu ar trebui't. - Douglas Crockford, 2012
Oficial JSON-ul este la JSON.org]1. JSON este definit ca un standard de ECMA Internaționale. Există întotdeauna o petiție procesul de a avea standarde revizuite. Este puțin probabil că adnotări vor fi adăugate la JSON standard din mai multe motive.
JSON prin design-ul este un ușor de inginerie inversă (uman analizat) alternativă la XML. Acesta este simplificat, chiar până la punctul că adnotările sunt inutile. Nu este chiar un limbaj de marcare. Scopul este de stabilitate și interoperablilty.
Cineva care intelege "a-un" relația de obiect orientarea poate înțelege orice structură JSON - asta e toată ideea. Acesta este doar un graf aciclic direcționat (DAG) cu nodul tag-uri (perechi cheie/valoare), care este aproape universal structura de date.
Asta numai adnotare necesare ar putea fi "//Acestea sunt DAG tag-uri". Cheia de nume poate fi la fel de informativ ca necesară, permițându-arbitrare semantic aritate.
Orice platforma poate parse JSON cu doar câteva linii de cod. XML necesită complex OO biblioteci care nu sunt viabile pe mai multe platforme.
Adnotări-ar face JSON face mai puțin interoperabile. Nu este pur și simplu nimic altceva pentru a adăuga, dacă ceea ce ai nevoie este un limbaj de marcare (XML), și don't dacă a persistat de date este ușor de analizat.