Ar JSON galima naudoti komentarus?

Ar galiu naudoti komentarus JSON faile? Jei taip, kaip?

6201
28 окт. pateikė Michael Gundlach, spalio 28 d 2008-10-28 23:39 '08, 11:39, 2008-10-28 23:39
@ 48 atsakymai
  • 1
  • 2

Ne

JSON turi būti visi duomenys, o jei įtraukiate komentarą, tai taip pat bus duomenys.

Gali būti, kad paryškintas duomenų elementas, vadinamas "_comment" (arba kažkas kitas), bus ignoruojamas naudojant JSON duomenis.

Tikriausiai geriausia, jei turite komentarų procesuose, kurie generuoja / priima JSON, nes jie turi žinoti, kurie JSON duomenys bus iš anksto arba bent jau jo struktūra.

Bet jei nuspręsite:

 { "_comment": "comment text goes here...", "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": { "GlossEntry": { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup > 
4379
29 окт. atsakymą pateikė Eli 29 d. 2008-10-29 00:01 '08 - 0:01 2008-10-29 00:01

Ne , formų komentarai //… arba neleidžiami JSON. Šis atsakymas pagrįstas:

border=0
1624
15 нояб. atsakymas pateikiamas stakx 15 nov. 2010-11-15 12:32 '10, 12:32, 2010-11-15 12:32

Įtraukite komentarus, jei pasirinksite; prieš juos analizuodami ar perduodami juos naudokite minifier.

Aš ką tik išleido JSON.minify () , kuris pašalina komentarus ir tarpus iš JSON bloko ir daro jį galiojančiu JSON, kurį galima išnagrinėti. Taigi galite naudoti jį kaip:

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

Kai ją išleisiu, aš gavau didžiulę reakciją iš žmonių, kurie nesutiko su šia idėja, todėl nusprendžiau parašyti visą dienoraštį apie tai, kodėl JSON yra svarbūs komentarai . Jis apima šį nuostabų JSON kūrėjo komentarą:

Tarkime, jūs naudojate JSON, kad išsaugotumėte konfigūracijos failus, kuriuos norite anotuoti. Eikite į priekį ir įklijuokite visus norimus komentarus. Tada perduokite jį per „JSMin“, prieš jį perduodant JSON analizatoriui. - Douglas Crockford, 2012 m

Tikiuosi, kad tai naudinga tiems, kurie nesutinka, kodėl JSON.minify () gali būti naudinga.

717
23 июня '10 в 21:20 2010-06-23 21:20 atsakė Kyle Simpson , birželio 23 d., 10, 21:20 2010-06-23 21:20

Komentarai buvo pašalinti iš JSON pagal dizainą.

Aš pašalinau JSON komentarus, nes pamačiau, kaip žmonės juos naudojo, kad išsaugotų analizavimo direktyvas, kurios galėtų pakenkti sąveikai. Žinau, kad komentarų trūkumas daro kai kuriuos žmones liūdnus, bet tai neturėtų.

Tarkime, jūs naudojate JSON, kad išsaugotumėte konfigūracijos failus, kuriuos norite anotuoti. Eikite į priekį ir įklijuokite visus norimus komentarus. Tada braukite jį per JSMin, prieš perduodami jį JSON analizatoriui.

Šaltinis: „ Douglas Crockford Public Expression“ G +

393
11 июня '12 в 11:52 2012-06-11 11:52 Atsakymą pateikė Arturas Czajka birželio 11 d. 11 val. 11:52 2012-06-11 11:52

ATSAKOMYBĖ: JŪSŲ GARANTIJOS BALSAVIMAS

Kaip jau buvo minėta, ši įsilaužimo sistema naudoja specifikaciją. Ne visi JSON partneriai supras šį JSON tipą. Visų pirma, srauto analizatoriai bus droseliuojami.

Tai įdomus smalsumas, bet jūs iš tikrųjų neturėtumėte jo naudoti nieko . Žemiau pateikiamas originalus atsakymas.


Radau šiek tiek įsilaužimo, kuris leidžia jums įdėti komentarus į JSON failą, kuris neturi įtakos analizavimui, arba bet kokiu būdu pakeisti rodomus duomenis.

Panašu, kad deklaruodami objektą pažodžiui, jūs galite nurodyti dvi reikšmes su tuo pačiu raktu, o pastarasis turi pirmenybę. Patikėkite ar ne, paaiškėja, kad JSON analizatoriai veikia taip pat. Todėl galime tai panaudoti, kad galėtume sukurti komentarus originaliame JSON, kuris nebus rodomas analizuojamo objekto vaizde.

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

Jei taikote šį metodą, JSON failo komentaras gali atrodyti taip:

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

Šis kodas galioja JSON . Jei analizuosite, gausite šį objektą:

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

Tai reiškia, kad komentarų nėra, ir jie neturės keistų šalutinių poveikių.

Laimingas įsilaužimas!

199
02 авг. atsakymas duotas Ped 02 rug. 2013-08-02 16:46 '13, 16:46, 2013-08-02 16:46

JSON nepalaiko komentarų. Jis taip pat niekada nebuvo skirtas naudoti konfigūracijos rinkmenose, kur reikia komentarų.

„Hjson“ yra žmonių konfigūracijos failo formatas. Atsipalaidavusi sintaksė, mažiau klaidų, daugiau komentarų.

2019

20 марта '14 в 18:26 2014-03-20 18:26 atsakymą laktak pateikė kovo 20 d. 14 d. 18:26 2014-03-20 18:26

Jūs negalite. Bent jau mano patirtis greitai žiūri į json.org .

JSON šiame puslapyje yra sintaksė. Nėra komentarų apie komentarus.

97
28 окт. Atsakymas suteikiamas linksmam 2008-10-28 23:42 '08 at 23:42 pm 2008-10-28 23:42

Apsvarstykite galimybę naudoti YAML. Tai beveik JSON viršelis (iš tikrųjų visi galiojantys JSON yra galiojantys YAML), ir tai leidžia komentuoti.

94
31 авг. Marnen Laibow-Koser atsakymas 2011-08-31 05:24 '11 at 5:24 am 2011-08-31 05:24

Vietoj to turėtumėte parašyti JSON schemą . Šiuo metu JSON schema yra siūlomas interneto specifikacijos projektas. Be dokumentacijos, schema taip pat gali būti naudojama JSON duomenų patvirtinimui.

Pavyzdys:

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

Dokumentus galite pateikti naudodami aprašymo atributą.

57
28 июля '10 в 21:38 2010-07-28 21:38 atsakymas pateikiamas rafeliu liepos 28, 10, 21:38 2010-07-28 21:38

Jei naudojate „ Jackson“ kaip JSON analizę, leiskite jam pateikti komentarus:

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

Tada gali būti tokių komentarų:

 { key: "value" // Comment } 

Be to, galite nustatyti komentarus, pradedant nuo # , nustatydami:

 mapper.configure(Feature.ALLOW_YAML_COMMENTS, true); 

Tačiau apskritai (kaip minėta anksčiau) specifikacija neleidžia komentuoti.

54
06 февр. Atsakymą pateikė Andrejs 06 vasario mėn 2014-02-06 23:44 '14 ne 23:44 2014-02-06 23:44

Pastabos nėra oficialus standartas. Nors kai kurie analizatoriai palaiko C stiliaus komentarus, naudoju JsonCpp . Pavyzdžiuose yra vienas:

 // 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 tai nepatvirtina. Taigi komentarai yra išplėtimai, skirti analizatoriui, o ne standartiniams.

Kitas analizatorius yra JSON5 .

Alternatyvus JSON TOML .

53
26 окт. atsakymas suteiktas schoetbi 26 okt. 2011-10-26 12:46 '11, 12:46, 2011-10-26 12:46

Čia rasite tai, ką suradau „ Google Firebase“ dokumentuose , leidžiančiuose JSON pridėti komentarų:

44
22 июня '17 в 15:58 2017-06-22 15:58 atsakymas pateiktas mana birželio 22, 17, 15:58 2017-06-22 15:58

Deja, negalime naudoti komentarų JSON ... Žr. JSON sintaksės diagramą JSON.org .

Douglasas Crockfordas sako: „ Kodėl jis ištrino JSON komentarus ir pateikė alternatyvų būdą tai padaryti “:

Ištrinau JSON komentarus, nes pamačiau, kaip žmonės juos naudojo, kad išsaugotų analizavimo direktyvas, kurios galėtų pakenkti sąveikai. Žinau, kad komentarų trūkumas daro kai kuriuos žmones liūdnus, bet tai neturėtų.

Tarkime, jūs naudojate JSON, kad išsaugotumėte konfigūracijos failus, kuriuos norite komentuoti. Eikite į priekį ir įklijuokite visus norimus komentarus. Tada perduokite jį per „JSMin“, prieš jį perduodant JSON analizatoriui.

40
08 нояб. atsakymas pateikiamas NavaRajan 08 nov. 2012-11-08 10:44 '12, 10:44, 2012-11-08 10:44

Jei jūsų tekstinis failas, kuris yra JSON eilutė, bus perskaitytas programoje, kaip sunku būtų iškirpti C arba C + + stiliaus komentarus prieš jį naudojant?

Atsakymas: Tai bus vienas įdėklas. Jei tai padarysite, JSON failus galima naudoti kaip konfigūracijos failus.

37
10 апр. John T. Vonachen atsakymas, pateiktas balandžio 10 d 2010-04-10 01:30 '10, 1:30, 2010-04-10 01:30

Jei naudojate „Newtonsoft.Json“ biblioteką su ASP.NET skaitymui / deserializavimui, galite naudoti JSON turinio komentarus:

// "vardas": "eilutė"

// "id": int

arba

/ * Tai

Komentaro pavyzdys

* /

PS: Vieni komentarai palaikomi tik 6+ „Newtonsoft Json“ versijose.

Papildoma pastaba tiems, kurie negali išsirinkti iš dėžutės: aš naudoju JSON formatą pagrindiniams nustatymams ASP.NET žiniatinklio programoje, kurią padariau. Aš perskaičiau failą, konvertuoju jį į nustatymo objektą naudojant „Newtonsoft“ biblioteką ir, jei reikia, naudokitės ja.

Norėčiau parašyti komentarus apie kiekvieną atskirą JSON failo parametrą, ir aš tikrai nesirūpinu JSON formato vientisumu, jei naudojasi biblioteka su ja.

Manau, kad tai yra „lengviau naudoti / suprasti“, nei sukurti atskirą parametrų rinkinį.README failą ir paaiškinti jo nustatymus.

Jei kyla problemų dėl šio tipo naudojimo; atsiprašau, džinas yra iš lempos. Žmonės galėtų rasti kitų būdų, kaip naudoti JSON formatą, ir jūs negalite nieko daryti.

33
25 июля '14 в 16:43 2014-07-25 16:43 atsakymas duodamas dvdmn liepos 25 d. 14, 16:43 2014-07-25 16:43

JSON idėja yra suteikti paprastą duomenų mainus tarp programų. Paprastai jie grindžiami internetu, o kalba yra „JavaScript“.

Tačiau iš tikrųjų tai neleidžia komentuoti, nes vienas iš duomenų pavadinimų / vertybių porų, be abejo, veiks, nors šie duomenys turėtų būti ignoruojami arba specialiai apdorojami pagal analizės kodą.

Viskas, kas pasakyta, nėra ketinimas, kad JSON faile būtų pateikiami komentarai tradicine prasme. Tai turi būti tik duomenys.

Daugiau informacijos rasite „ JSON“ svetainėje .

28
29 окт. atsakymą pateikė Neil Albrock 29 okt. 2008-10-29 02:05 '08, 02:05, 2008-10-29 02:05

Aš tiesiog susidūriau su konfigūracijos failais. Nenoriu naudoti XML (išsamios, grafiškai, bjaurios, sunkiai skaitomos) ar „ini“ (be hierarchijos, be realaus standarto ir tt) Arba „Java“ „Properties“ formatu (pvz., .Ini).

„JSON“ gali padaryti viską, ką gali, bet tai yra daug mažiau aiški ir lengviau suprantama kalba, o analizatoriai lengvai ir visuotinai platinami daugeliu kalbų. Tai tik duomenų medis. Tačiau komentarams iš juostos dažnai reikia dokumentuoti numatytas konfigūracijas ir pan. Konfigūracijos niekada neturėtų būti „išsamūs dokumentai“, bet išsaugoti duomenų medžiai, kurie gali būti įskaitomi kaip reikia.

Manau, kad galite naudoti "#": "comment" , „galiojantis“ JSON.

27
22 июня '11 в 16:09 2011-06-22 16:09 atsakymą peter davė birželio 22 d. 11 d. 16.00 val. 2011-06-22 16:09

Tai priklauso nuo JSON bibliotekos. „Json.NET“ palaiko „ JavaScript“ tipo komentarus, .

Žr. Kitas klausimas apie kamino perpildymą .

26
Atsakymas yra AZ. 04 rug 2012-08-04 03:56 '12 at 3:56 2012-08-04 03:56

„JSON“ iš pradžių nepalaiko komentarų, tačiau galite padaryti savo dekoderį arba bent jau išankstinį procesorių, kad neįtrauktumėte puikių komentarų (jei tiesiog ignoruojate komentarus ir nenaudojate, kaip jūsų programa turėtų tvarkyti JSON duomenis) .

JSON neturi komentarų. JSON koduotojas NEGALIMA išleisti komentarų. JSON dekoderis gali priimti ir ignoruoti komentarus.

Pastabos niekada neturėtų būti naudojamos perduodant bet kokias svarbias pastabas. Būtent tai yra JSON.

Cf: Douglas Crockford, JSON specifikacijos autorius .

26
25 июня '13 в 17:48 2013-06-25 17:48 atsakymas gaborousas birželio 25 d. 13 val. 17:48 2013-06-25 17:48

JSON daro daug prasmės konfigūracijos failams ir kitiems vietiniams tikslams, nes ji yra visur, nes ji yra daug paprastesnė nei XML.

Jei žmonės turi rimtų priežasčių prieš JSON komentarus duomenų perdavimo metu (nepriklausomai nuo to, ar jie galioja, ar ne), galbūt JSON gali būti suskirstyti į dvi dalis:

  • JSON-COM: JSON ant vielos ar taisyklių, taikomų perduodant JSON duomenis.
  • JSON-DOC: JSON dokumentas arba JSON failuose arba vietoje. Taisyklės, apibrėžiančios galiojantį JSON dokumentą.

JSON-DOC leis jums komentuoti, ir gali būti ir kitų nedidelių skirtumų, pvz., Apdorojimo erdvių. Parersai gali lengvai konvertuoti iš vienos specifikacijos į kitą.

Kalbant apie Douglas Crockford pateiktą komentarą dėl šių klausimų (žr. @Artur Czajka)

Tarkime, jūs naudojate JSON, kad išsaugotumėte konfigūracijos failus, kuriuos norite anotuoti. Eikite į priekį ir įklijuokite visus norimus komentarus. Tada braukite jį per JSMin, prieš perduodami jį JSON analizatoriui.

Kalbame apie bendrą konfigūracijos failo problemą (kryžminę kalbą / platformą), ir ji reaguoja su specialiąja JS programa!

Įsitikinkite, kad JSON-specifinis minigavimas gali būti įgyvendintas bet kuria kalba, bet standartizuoti taip, kad jis taptų visur kalbėtojams visomis kalbomis ir platformomis, taigi žmonės nustoja eikvoti savo laiko dėl nepakankamo funkcijų, nes jie turi gerų precedentų problema internetiniuose forumuose ir priversti žmones pasakyti jiems, kad tai yra bloga idėja arba pasiūlymas lengvai įgyvendinti komentarų pašalinimą iš tekstinių failų.

Kita problema yra suderinamumas. Tarkime, jūs turite biblioteką ar API arba bet kurį posistemį, kuriame yra tam tikri konfigūracijos failai ar su juo susiję duomenys. Ir šis posistemis skirtas prieigai iš įvairių kalbų. Tada pasakykite žmonėms: beje, nepamirškite persikelti JSON failų komentarų prieš perkeldami juos į analizatorių!

23
11 дек. Basel Shishani atsakymas 11 d. 2012-12-11 04:37 '12 at 4:37 2012-12-11 04:37

Jei naudojate JSON5 , galite įtraukti komentarus.


JSON5 yra siūlomas JSON plėtinys , kuriuo siekiama supaprastinti rankinį įrašymą ir palaikymą žmonėms. Tai daroma pridedant keletą minimalių sintaksinių savybių tiesiogiai iš ECMAScript 5.

20
24 нояб. Atsakymą pateikė Smit Johnth Nov 24 2015-11-24 07:34 '15 at 7:34 am 2015-11-24 07:34

„Dojo Toolkit JavaScript“ įrankių rinkinys (bent jau nuo 1.4 versijos) leidžia JSON įtraukti komentarus. Pastabos gali būti pateiktos formatu . „Dojo Toolkit“ naudoja JSON skambindamas dojo.xhrGet() .

Kiti „JavaScript“ įrankiai gali veikti panašiai.

Tai gali būti naudinga eksperimentuojant su alternatyviomis duomenų struktūromis (ar net duomenų sąrašais) prieš pasirinkdami galutinį variantą.

20
19 янв. Atsakykite Dovydui 19 d 2011-01-19 00:57 '11 prie 0:57 2011-01-19 00:57

Gali būti komentarų JSONP , bet ne gryname JSON. Aš praleidžiau valandą bandydamas savo programą dirbti su šiuo pavyzdžiu iš „Highcharts“: http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json>

Jei stebėsite nuorodą, pamatysite

 ?( [  [1147651200000,67.79], [1147737600000,64.98], ... [1368057600000,456.77], [1368144000000,452.97] ]); 

Kadangi turėjau panašų failą vietiniame aplanke, nesukėlė problemų dėl tos pačios kilmės politikos , todėl nusprendžiau naudoti gryną JSON ... ir, žinoma, $.getJSON nepavyko dėl komentarų.

Galų gale, aš tiesiog atsiunčiau rankinį HTTP užklausą į pirmiau nurodytą adresą ir supratau, kad turinio tipas buvo text/javascript , nes JSONP grąžina gryną „JavaScript“. Tokiu atveju komentarai leidžiami. Tačiau mano paraiška grįžo į turinio tipą application/json , todėl turėjau ištrinti komentarus.

17
07 окт. atsakymas duotas 07 dalis. 2013-10-07 23:37 '13, 23:37, 2013-10-07 23:37

JSON nėra failų protokolas . Tai yra laisvas kalbų formatas. Todėl JSON komentarų formatas nėra apibrėžtas.

Kaip ir daugelis žmonių, yra keletas gudrybių, pvz., Dublikatų raktai arba konkretus raktas, kurį galite naudoti. Tai priklauso nuo jūsų.

17
20 июля '15 в 12:26 2015-07-20 12:26 atsakymą pateikė „ Manish Shrivastava“ liepos 20 d., 15 val. 12:26 2015-07-20 12:26

Tai yra klausimas „galite . Ir atsakymas yra taip .

Ne, neturėtumėte naudoti dvigubų objekto narių, kad įvestumėte šoninio kanalo duomenis į JSON kodavimą. (Žr. „Pavadinimai objekte turi būti unikali“ RFC ).

Ir taip, galite įterpti komentarus apie JSON , kuriuos galėtumėte analizuoti.

Bet jei norite įterpti ir ištraukti savavališkus šalutinio kanalo duomenis į galiojantį JSON, čia yra atsakymas. JSON koduotėje naudojame unikalų duomenų vaizdą. Tai leidžiama * antrajame RFC skyriuje „Spaces yra leidžiama prieš arba po bet kurio iš šešių struktūrinių simbolių“.

* RFC nurodo, kad „erdvės yra leistinos prieš bet kurį iš šešių struktūrinių simbolių“, be aiškių eilių, skaičių, klaidingų, teisingų ir nulinių. Šis praleidimas yra ignoruojamas visuose įgyvendinimuose.


Pirmajame savo JSON kanonizuokite:

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

Tada koduokite komentarą dvejetainiu formatu:

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

Tada sutraukite savo dvejetainį failą:

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

Štai jūsų išvada:

 $jsonWithComment = $steg . $jsonMin; 
16
24 апр. William Entriken atsakymas balandžio 24 d 2014-04-24 20:23 '14, 20:23, 2014-04-24 20:23

Mūsų projektui naudojame „ strip-json-comments . Jis palaiko kažką panašaus:

  { // rainbows "unicorn":  "cake" } 

Tiesiog npm install --save strip-json-comments įdiegti, ir naudokite jį kaip:

 var strip_json_comments = require('strip-json-comments') var json = '{"unicorn":"cake"}'; JSON.parse(strip_json_comments(json)); //=> {unicorn: 'cake'} 
11
27 нояб. atsakymą pateikė Joy lapkričio 27 d. 2014-11-27 14:39 '14, 14:39 2014-11-27 14:39

Norėdami sumažinti JSON elementą į gabalus, pridedu eilutes „manekeno komentaras“:

 { "#############################" : "Part1", "data1" : "value1", "data2" : "value2", "#############################" : "Part2", "data4" : "value3", "data3" : "value4" } 
10
29 окт. atsakymą pateikė Chris 29 okt. 2013-10-29 13:30 13 iš 13:30 2013-10-29 13:30

Yra geras sprendimas (nulaužimas), kuris iš tikrųjų yra JSON. Tiesiog padarykite tą patį klavišą du kartus (arba daugiau). Pavyzdžiui:

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

Taigi JSON tai supras, kaip:

 { "param" : "This is value place", } 
10
28 янв. atsakymą pateikė Aurimas 2014-01-28 18:04 '14, 18:04 2014-01-28 18:04

JSON autorius nori, kad JSON pateiktume komentarus, tačiau juos atskirtume prieš juos analizuojant (žr. Michael Burr pateiktą nuorodą ). Jei JSON turėtų komentarus, kodėl jų standartizuoti negalima, ir leiskite JSON analizatoriui atlikti darbą? Aš nesutinku su logika, bet, deja, tai yra standartas. YAML sprendimo naudojimas, kaip siūlo kiti, yra geras, tačiau tam reikia priklausomybės nuo bibliotekos.