Yorumlar JSON'da kullanılabilir mi?


7608

Bir JSON dosyasının içindeki yorumları kullanabilir miyim? Öyleyse nasıl?


153
@StingyJack: Açık olmayan veya yorumlarla yapılabilecek başka her şeyi açıklamak. Veri dosyalarında sıklıkla bir yorumum var. XML, ini dosyaları ve diğer birçok biçim, yorum hükümleri içerir.
Michael Burr

24
Benim gibi //comments, bir Sublime Text yapılandırma dosyasının özel kullanım durumu için uygun olup olmadığını merak ediyorsanız , cevap evettir (sürüm 2'den itibaren). Sublime Text en azından bu konuda şikayette bulunmayacak, oysa {"__comment": ...}konsolda şikayet edecek , çünkü bu beklenmedik bir alan.
driftcatcher

8
ve belki de bu TOML'un yaratılmasının bir nedenidir ..
Alex Nolasco

10
Biraz noobish ama, ben de // JSON yorumları için kullanarak çalıştı. Şimdi kesinlikle değişim / değişim için kullanıldığını anlıyorum. İç çekmek! Artık yorum yapamam :(. Hayat mahkumdur !.
Sid

12
JSON5 yorumları destekler: stackoverflow.com/a/7901053/108238
schoetbi

Yanıtlar:


5592

Hayır.

JSON'un tamamı veri olmalıdır ve bir yorum eklerseniz, veri de olur.

Adlı bir veri öğeniz olabilir. "_comment"JSON verilerini kullanan uygulamalar tarafından göz ardı edilecek (veya bir şey) öğeniz olabilir.

JSON verilerinin / almalarının, JSON verilerinin önceden ne olacağını veya en azından yapısını bilmeleri gerektiğinden, muhtemelen yorumda bulunmanız daha iyi olur.

Ama eğer karar verdiyseniz:

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

232
Yorum adında geçerli bir alan olması durumunda gerçek yorumda bir tür önek olması gerekebilir:"__comment":"comment text goes here...",
Rob Fonseca-Ensor

19
Java google-gson için json kütüphanesi BTW, yorumlar için desteğe sahiptir.
centic

11
Üstüne ayrı yorumunu isteseydi hakkında Accronymve Abbrevözellikleri? Bu modeli daha önce kullandım ama yapmama izin vermediği için durdum. Bu bir hack. Belki __comment__onun yerine bir mülk adı başlasam . Bu "__comment__Abbrev", hala bir hack, ama tüm prpoerties hakkında yorum yapmama izin verir
Juan Mendes

41
ayrıca "//" kullanabilirsiniz: bu daha doğal görünüyor ve aynı
ebeveynte

4
İnsan odaklı yapılandırma dosyaları için JSON kullanıldığında, insanların daha iyi anlayabilmeleri için açıklama eklenmelidir. Ek açıklamalı, bu dosya artık geçerli JSON değil, ancak çözümler var. Örneğin, Google'ın GYP işlevi # tarzı yorumları destekler. JSON.Minify, giriş dosyanızdan C / C ++ stili yorumları atmanıza yardımcı olacaktır.
Петър Петров

1841

Hayır , formun yorumlarına //…veya /*…*/JSON'da izin verilmiyor. Bu cevap aşağıdakilere dayanmaktadır:

  • http://www.json.org
  • RFC 4627 :application/json JavaScript Nesne Gösterimi için Medya Türü (JSON)
  • RFC 8259 JavaScript Nesne Gösterimi (JSON) Veri Değişim Biçimi (supercedes RFCs 4627, 7158, 7159)

67
JSON'unuza yorumlarla açıklama eklemek isterseniz (böylece geçersiz JSON yapar), ayrıştırmadan veya iletmeden önce küçültün. Crockford bunu 2012 yılında yapılandırma dosyaları bağlamında kabul etti.
araç çubuğu

25
@alkuzad: Bu biçimsel gramerler gelince, açıkça onlar söylüyor birşeyler olmalı edilir değil başka bir yol, izin verdi. Örneğin, programlama dilinizi seçin: İstenen (ancak eksik) özelliklerden bazılarının açıkça izin verilmemesi, derleyicinizin bunu sihirli bir şekilde tanıyacağı anlamına gelmez.
stakx - artık

5
Evet. JSON formatı, elemanlar arasında çok fazla ölü boşluğa sahiptir ve bu bölgelerde boşluk duyarsızdır, bu nedenle orada tek veya çok satırlı yorum yapamamanızın bir nedeni yoktur. Birçok ayrıştırıcı ve küçültücü JSON yorumlarını da destekler, bu nedenle ayrıştırıcının bunları desteklediğinden emin olun. JSON, uygulama verileri ve yapılandırma ayarları için çok kullanılır, bu nedenle yorumlar artık gereklidir. "Resmi spec" güzel bir fikir, ama yetersiz ve eski, çok kötü. Yük boyutu veya performans konusunda endişeleriniz varsa JSON'unuzu küçültün.
Triynko

58
Cevabınız kesinlikle doğru olmasına rağmen, bunun BS olduğu söylenmelidir. Pek çok son kullanıcı json yapılandırmasına ihtiyaç duyduğunda, yorumlar son derece yararlıdır. Sadece bazı kalay folyo şapka JSON olduğuna karar verdiler olduğunu ve her zaman olmalı insanlar ihtiyaçları o küçük fikirli bir karikatür IMHO okumak için gerçeğini görmezden, makine tarafından okunabilir.
cmroanirgo

18
@cmroanirgo: Açıkça JSON'un bu sınırlamasından şikayet eden ilk kişi siz değilsiniz ... Bu yüzden yorumlara ve YAML ve JSON5 gibi diğer formatlara sessizce izin veren ayrıştırıcılarımız var. Ancak bu JSON'un ne olduğu gerçeğini değiştirmez. Daha ziyade, söz konusu sınırlama göz önüne alındığında, insanların JSON'u ilk başta açıkça yeterli olmadığı amaçlar için kullanmaya başlamalarını ilginç buluyorum. JSON formatını suçlamayın; özellikle uygun olmayan yerlerde kullanmakta ısrar ettiğimiz için kendimizi suçlayın.
stakx - artık

802

İsterseniz yorumları ekleyin; ayrıştırmadan veya iletmeden önce bunları bir kıyma makinesiyle çıkarın.

Ben sadece bir JSON bloğundan yorumlar ve boşluk çıkarır ve ayrıştırılabilir geçerli JSON yapar JSON.minify () yayımladı . Yani, şöyle kullanabilirsiniz:

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

Onu serbest bıraktığımda, fikri bile kabul etmeyen büyük bir tepki aldım, bu yüzden yorumların neden JSON'da mantıklı olduğuna dair kapsamlı bir blog yazısı yazmaya karar verdim . JSON'un yaratıcısından gelen bu önemli yorumu içerir:

Açıklama eklemek istediğiniz yapılandırma dosyalarını saklamak için JSON kullandığınızı varsayalım. Devam edin ve beğendiğiniz tüm yorumları ekleyin. Sonra JSON ayrıştırıcısına teslim etmeden önce JSMin üzerinden boru. - Douglas Crockford, 2012

Umarım bu JSON.minify () 'in neden yararlı olabileceğine katılmayanlar için faydalıdır.


153
JSON.minify () ile sahip olduğum tek sorun, gerçekten çok yavaş olmasıdır. Ben de aynı şeyi yapan kendi uygulamamı yaptım: gist.github.com/1170297 . Bazı büyük test dosyalarında uygulamanız 74 saniye sürer ve benim 0.06 saniye sürer.
WizKid

56
JSON.minify () için github repo'ya önerilen alternatif algoritmayı gönderebilmeniz harika olurdu, böylece desteklenen tüm dillere
Kyle Simpson

16
@MiniGod Doug'un bu konu hakkındaki düşüncelerini birçok kez duymuştum. Uzun zaman önce blog yazımda
Kyle Simpson

18
@ MarnenLaibow-Koser, veri akışı (hatta paket) kullanımı için bile yorumlar için hala geçerli kullanımlar vardır: oluşturma süresi veya kaynakları gibi teşhis meta verilerinin dahil edilmesi XML ile ortak kullanımdır ve JSON verileri için de mükemmel şekilde duyarlıdır. Yorumlara karşı argümanlar sığdır ve herhangi bir metinsel veri formatı, zımni amaçlanan kullanıma bakılmaksızın yorumlara izin vermelidir (spesifikasyon JSON'un başka bir yerde kullanılamayacağını öne süren herhangi bir şey, fwiw)
StaxMan

18
JSON (temel olarak yaptığı) evrensel kabul görecekse, evrensel uygulamaya sahip olmalıdır. Örnek: JSON, bir uygulama yapılandırma dosyası olarak kullanılabilir. Bu uygulama yorumları arzu eder.
eggmatters

441

Yorumlar tasarımla JSON'dan kaldırıldı.

JSON'dan yorumları kaldırdım çünkü insanların bunları birlikte çalışma yönergesini yok edecek bir uygulama olan ayrıştırma yönergelerine sahip olduklarını gördüm. Yorum eksikliğinin bazı insanları üzdüğünü biliyorum, ama olmamalı.

Ek açıklama eklemek istediğiniz yapılandırma dosyalarını saklamak için JSON kullandığınızı varsayalım. Devam edin ve istediğiniz tüm yorumları ekleyin. Sonra JSON ayrıştırıcısına teslim etmeden önce JSMin üzerinden boru.

Kaynak: Douglas Crockford'un G + hakkında kamuoyu açıklaması


198
JSON'un XML'den daha insan tarafından okunabilir olması gerektiğini düşündüm? Yorumlar okunabilirlik içindir.
intrepidis

25
Her neyse, yaramaz olabilir ve JSON'a ayrıştırma yönergeleri ekleyebilirsiniz: {"__directives": {"# n #": "DateTime.Now"}, "validdate": "# n #"} ... YAML gibi görünüyor ileriye giden yol ...
intrepidis

73
Kişisel görüş: yorumlara izin vermemek topal. Yapılandırma dosyalarımı çözmek için yorumları yok sayan, standart olmayan bir JSON ayrıştırıcısı oluşturmaktan başka seçeneğim yoktu.
caiosm1005

17
@ArturCzajka Ben hala JSON yorumları desteklemiyor aslında sevmiyorum, ama INI bir deneyin verdi ve itiraf etmeliyim ki JSON üzerinde yapılandırma dosyaları için kullanmak çok daha mantıklı. Yanıt için teşekkürler ve umarım daha fazla insan bu konuşmayı okurken fikirlerini değiştirir. (ayrıştırıcı yapmak zaten bir egzersizdi :)
caiosm1005

77
Bu, tüm bisikletlerin eğitim tekerleğine sahip olmasını gerektiriyor çünkü bazı insanlar bisiklet süremiyor. Önemli bir özelliği kaldırmak aptal insanlar kötüye tasarım kötü çünkü. Bir veri formatı, aptal geçirmez olmaya göre kullanılabilirliğe öncelik vermelidir.
Phil Goetz

205

YASAL UYARI: GARANTİNİZ GEÇERSİZ

Belirtildiği gibi, bu kesmek spesifikasyonun uygulanmasından yararlanır. Tüm JSON ayrıştırıcıları bu tür JSON'u anlamayacaktır. Özellikle akış ayrıştırıcılar boğulur.

Bu ilginç bir merak, ama gerçekten hiçbir şey için kullanmamalısınız . Orijinal cevap aşağıdadır.


Ayrıştırmayı etkilemeyecek bir JSON dosyasına yorum eklemenize veya herhangi bir şekilde temsil edilen verileri değiştirmenize izin veren küçük bir kesmek buldum.

Bir nesne hazır bilgisini bildirirken aynı anahtarla iki değer belirtebileceğiniz ve sonuncunun öncelikli olduğu anlaşılıyor. İster inanın ister inanmayın, JSON ayrıştırıcılarının aynı şekilde çalıştığı ortaya çıkıyor. Bu nedenle, kaynak JSON'da bir ayrıştırılmış nesne sunumunda bulunmayacak yorumlar oluşturmak için bunu kullanabiliriz.

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

Bu tekniği uygularsak, yorumladığınız JSON dosyanız şöyle görünebilir:

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

Yukarıdaki kod geçerli JSON . Ayrıştırırsanız, bunun gibi bir nesne alırsınız:

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

Bu, yorumların izi olmadığı ve garip yan etkilerinin olmayacağı anlamına gelir.

Mutlu hack!


150
Gönderen şartname : Bir nesnenin içinde adları benzersiz GEREKEN.
Quentin

113
"tüm uygulamalar aynı şeyi ele" - Bu kanıtlamak zor bir şey.
Quentin

91
JSON'daki öğelerin sırası garanti edilmez. Bu, "son" öğenin değişebileceği anlamına gelir!
sep332

66
Bu açıkça spesifikasyonları ihlal eder (yukarıdaki yorumlara bakınız), bunu yapma. ietf.org/rfc/rfc4627.txt?number=4627
voidlogic

334
HAYIR - ayrıştırıcı akış yapıyorsa ne olur? Ayrıştırıcı bunu anahtar sırasının tanımlanmadığı bir sözlükte okursa ne olur? ateşle öldür .
deanWombourne

183

JSON yorumları desteklemez. Ayrıca, yorumların gerekli olacağı yapılandırma dosyaları için asla kullanılması amaçlanmamıştır.

Hjson insanlar için bir yapılandırma dosyası biçimidir. Rahat sözdizimi, daha az hata, daha fazla yorum.

Hjson girişi

JavaScript, Java, Python, PHP, Rust, Go, Ruby ve C # kütüphaneleri için hjson.org adresine bakın .


13
Upvoted. Açıkça muhafazakar insanların nefret etmeyi seveceği iyi bir varyasyon. Umarım uygulamanız daha fazla bilinir - ve belki de orijinalinden daha popüler olur;) Umarım birisi Ruby ile de uygular. @adelphus İyi tanımlanmış dil sizin kendi bakış açınız veya düşüncenizdir. Eğer muhafazakar bir "geliştirici" olmanız daha iyi olduğunuzu kanıtlamaz ve kendinizi sınırlı alanlarda kilitli tutmaktan daha kötü olabilirsiniz. İnsanları korkunç geliştiriciler olarak kolayca yargılama.
konsolebox

7
Üzgünüm, @konsolebox. Belki yeniden gözden geçirebileceğini sizin okuduktan sonra görünümü "iyi tanımlanmış JSON senin görüşün" ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf Bu gerçek bir standarttır ve kendi "özel" versiyonlarını uygulamaya DEVS parçalanma, karışıklık ve zaman kaybına yol açar. Sadece her tarayıcı standartların biraz farklı sürümlerini uyguladığı için kod yazarken bırakılan karmaşaya bakın. JSON dili mükemmel olmayabilir, ancak parçalanma daha kötüdür. Ve evet, bu sadece bir fikir ve katılmıyorum.
adelphus

22
Senin tüketimine hayranım, ama YAML'yi yeniden icat ediyorsun. Çok fazla esneklik ve insan tarafından okunabilirlik istiyorsanız, YAML kullanın (aslında: stackoverflow.com/questions/450399/… ) veya curmudgeony, ancak belirsiz JSON ile sopa yapın.
araç çubuğuAğustos

4
En kullanıcı dostu yapılandırma formatının hala INI olduğunu düşünüyorum. Çok basit ve sözdizimi ağır değil. Bu, kullanıcıların sadece parmaklarını yapılandırma havuzuna daldırmalarını daha az korkutucu hale getirir.
Matt

14
Eğer (yorum yapılandırma olarak json ihtiyaç duyarsan vardır tabi) - dosyanızı yerine ".json" nin ".js" adını .. js ders ilaveten herhangi bir geçerli json nesnesi işlemek ve can edebilir o yüzden bir yorum işlemek .. İşte sebebi "webpack.config.js" değil, "webpack.config.json" değil (webpack'te bunun için çok daha fazla neden var: P)
jebbie

122

YAML kullanmayı düşünün. Neredeyse JSON'un bir üst kümesidir (neredeyse tüm geçerli JSON geçerli YAML'dir) ve yorumlara izin verir.


12
@ g33kz0r Doğru, bu yüzden YAML'yi JSON'a yakın bir süper set olarak tanımladım.
Marnen Laibow-Koser

12
@NateS Birçok kişi cevabın hayır olduğuna işaret etmişti. OP'nin amacına ulaşmak için daha iyi bir yol önerdim. Bu bir cevap.
Marnen Laibow-Koser

5
Dezavantajı: yamlKütüphane Python ile birlikte gönderilmez.
Kanama Parmakları

6
@ marnen-laibow-koser: evet, Java ve Perl için kullanılabilir YAML kitaplıklarını kullanmak ve her biri tarafından üretilen YAML'nin hatasız olarak birbirleri tarafından tüketilmesini beklemekte yetersiz kalmalıydı. YAML birlikte çalışmasının bir sorun olduğunu, ancak JSON birlikte çalışmasının olmadığını tamamen bilgi eksikliğim açıklıyor.
araç çubuğuAğustos

3
@ marnen-laibow-koser, aynı şeyi daha basit bir spesifikasyonla gerçekleştiren bir format daha iyidir. Kusursuz uygulamalara sahip pragmatik bir biçim, mükemmel olmayan uygulamalara sahip ideal bir biçimden daha iyidir. Hatalı libs için tüm suçlamalar uygulayıcıların omuzlarında değildir; YAML spesifikasyonu uzun, yoğun ve geniş. Wikipedia girişi iki belirsizlik örneğinden bahsediyor; bir insan ile belirsizliği koruyan biçim arasında bir yayıcı koyması gerekiyorsa, biçim insan dostu iddiasını kaybeder. JSON daha az talepte bulunur ve YAML'nin daha fazla iddiada bulunduğu ve yetersiz kaldığı durumlarda çoğunlukla başarılı olur.
araç çubuğu

108

Yapamazsın. En azından bu benim json.org'a hızlı bir bakışla deneyimim .

JSON sözdizimini bu sayfada görselleştirmiştir. Yorumlar hakkında not yok.


67

Bazı ayrıştırıcılar C ++ tarzı yorumları desteklese de yorumlar resmi bir standart değildir. Kullandığım biri JsonCpp . Örneklerde bu var:

// 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 bunu doğrulamaz. Dolayısıyla yorumlar ayrıştırıcıya özgü bir uzantıdır ve standart değildir.

Başka bir ayrıştırıcı JSON5 .

JSON TOML'a bir alternatif .

Başka bir alternatif jsonc'dir .


Groovy, JSON ile başa çıkmak için bazı yerleşik sınıflara sahiptir . JsonSlurper yorumları işleyebilir. Tabii ki, resmi spesifikasyonda yorumlara izin verilmez, bu nedenle herhangi bir ayrıştırıcıdaki bu davranış standart değildir ve taşınabilir değildir.
izrik

Newtonsoft Json.NET ayrıca C tarzı yorumları sorunsuz bir şekilde destekliyor
Max

66

Bunun yerine bir JSON şeması yazmalısınız . JSON şeması şu anda önerilen bir Internet taslak belirtimidir. Dokümanların yanı sıra şema, JSON verilerinizi doğrulamak için de kullanılabilir.

Misal:

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

Açıklama şeması özniteliğini kullanarak dokümantasyon sağlayabilirsiniz .


5
JSON şeması canlı mı? Var ama bilinen herhangi bir kütüphane tarafından destekleniyor mu?
Munhitsu

1
evet, json-schema google grubu oldukça aktif ve bir JSON Schema doğrulayıcı iyi bir JavaScript uygulaması için JSV öneriyoruz .
raffel

5
Bu yalnızca yapılandırılmış dokümantasyona yardımcı olur, geçici dokümantasyona değil
Juan Mendes

Clojure kullanıyorsanız (ve emin değilseniz) burada açık kaynaklı bir JSON şema ayrıştırıcısı var: github.com/bigmlcom/closchema
charleslparker

@Munhitsu Manatee.Json (.Net) JSON şemasını kapsamlı bir şekilde destekler.
gregsdennis

64

JSON ayrıştırıcısı olarak Jackson kullanıyorsanız , yorumlara izin vermek için bu şekilde etkinleştirirsiniz:

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

Sonra böyle yorumlarınız olabilir:

{
  key: "value" // Comment
}

Ayrıca, aşağıdakileri ayarlayarak da yorum yapabilirsiniz #:

mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);

Ancak genel olarak (daha önce yanıtlandığı gibi) şartname yorumlara izin vermez.


50

Google Firebase belgelerinde JSON'a yorum yazmanıza olanak sağlayan bulduğum şey :

{
  "//": "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"
}

Bilginize, Firebase Gerçek Zamanlı Veritabanı bir anahtarda '/' kullanımına izin vermez. yani bu kendi kullanımınız için güzel bir kongre olabilir, ancak
Firebase'de yapamazsınız

5
Bu yöntem, anahtarın benzersiz olması gereken bazı kütüphaneleri kırar. Ben yorumları numaralandırarak bu soruna geçici bir çözüm bulmak.
MovGP0

iyi yorum, ben SO üzerinde bu soruyu buldum ... bu bölüm spec tarafından kaplı görünmüyor stackoverflow.com/questions/21832701/…
mana

4
Bugünlerde şu şekilde kullanma eğilimindeyim: {"// foo": "foo comment", "foo": "foo value", "// bar": "bar comment", "bar": "bar value"} Birden çok yorum için bir dizi kullanabilirsiniz: {"// foo": ["foo açıklama 1", "foo yorum 2"], "foo": '' foo değeri "}
MovGP0

47

HAYIR . JSON yorumları destekliyordu, ancak istismar edildi ve standarttan çıkarıldı.

JSON'un yaratıcısından:

JSON'dan yorumları kaldırdım, çünkü insanların bunları birlikte çalışabilirliği yok edecek bir uygulama olan ayrıştırma direktiflerini tutmak için kullandıklarını gördüm. Yorum eksikliğinin bazı insanları üzdüğünü biliyorum, ama olmamalı. - Douglas Crockford, 2012

Resmi JSON sitesi JSON.org adresindedir . JSON, ECMA International tarafından standart olarak tanımlanmaktadır . Standartların revize edilmesi için her zaman bir dilekçe süreci vardır. Ek açıklamaların birkaç nedenden dolayı JSON standardına eklenmesi olası değildir.

Tasarım ile JSON, XML için kolayca tersine mühendislikle (insan tarafından ayrıştırılmış) bir alternatiftir. Ek açıklamaların gereksiz olduğu noktaya kadar basitleştirilmiştir. Bir biçimlendirme dili bile değildir. Amaç istikrar ve birlikte çalışabilirliktir.

Nesne yöneliminin "has-a" ilişkisini anlayan herkes herhangi bir JSON yapısını anlayabilir - bütün mesele budur. Bu, neredeyse evrensel bir veri yapısı olan düğüm etiketlerine (anahtar / değer çiftleri) sahip yönlendirilmiş bir döngüsel grafiktir (DAG).

Gereken bu ek açıklama "// Bunlar DAG etiketleri" olabilir. Anahtar isimleri istenildiği kadar bilgilendirici olabilir ve keyfi anlamsal düzene izin verir.

Herhangi bir platform JSON'u yalnızca birkaç satır kodla ayrıştırabilir. XML, birçok platformda geçerli olmayan karmaşık OO kitaplıkları gerektirir.

Ek açıklamalar yalnızca JSON'un daha az birlikte çalışabilir olmasını sağlar. Gerçekten ihtiyacınız olan şey bir biçimlendirme dili (XML) değilse ve kalıcı verilerinizin kolayca ayrıştırılıp ayrıştırılmadığı umurumda olmadığı sürece eklenecek başka bir şey yoktur.

AMA JSON'un yaratıcısı da gözlemlediğinden, yorumlar için her zaman JS boru hattı desteği olmuştur:

Devam edin ve istediğiniz tüm yorumları ekleyin. Sonra JSON ayrıştırıcısına teslim etmeden önce JSMin üzerinden boru. - Douglas Crockford, 2012


37

JSON dizesi olan metin dosyanız bir program tarafından okunacaksa, kullanmadan önce C veya C ++ tarzı yorumları çıkarmak ne kadar zor olurdu?

Cevap: Tek bir astar olurdu. Bunu yaparsanız, JSON dosyaları yapılandırma dosyaları olarak kullanılabilir.


1
Muhtemelen şimdiye kadarki en iyi öneri, yine de dosyaları bir değişim formatı olarak tutmak için bir sorun olsa da, kullanımdan önce ön işleme ihtiyaçları var.
Orbling

Kabul ediyorum ve Java'da www.SoftwareMonkey.org adresinde bulunan bir JSON ayrıştırıcısı yazdım, tam olarak bunu yapıyorum.
Lawrence Dol

2
Rağmen, JSON genişletmek için iyi bir fikir değil (farklı bir değişim biçimi çağırmadan): dizeleri içinde "yorumları" görmezden emin olun. {"foo": "/ * Bu bir yorum değil. * /"}
stofl

27
"... tek bir astar olur" umm, hayır, aslında JSON, normal ifadenin / / çiftlerini basitçe bulabildiği normal bir dilbilgisi değildir. Bir dizenin içinde a / * görünüp görünmediğini (ve görmezden geldiğini) bulmak için dosyayı ayrıştırmanız gerekir. Ayrıca, yanıtınız yararsızdır; herhangi bir çözüm.
Kyle Simpson

1
@ Kyle-simpson ne dedi. Ayrıca, okuyucuları JSON.minify'ı geçici regexps'e alternatif olarak kullanma konusundaki kendi cevabına yönlendirmek için çok mütevazı. Bunu yap, bunu değil.
araç çubuğu

36

ASP.NET ile Newtonsoft.Json kütüphanesini okumak / serisini kaldırmak için kullanıyorsanız JSON içeriğindeki yorumları kullanabilirsiniz:

// "ad": "dize"

// "id": int

veya

/* Bu bir

yorum örneği * /

Not: Tek satırlı yorumlar yalnızca Newtonsoft Json'un 6+ sürümünde desteklenir.

Kutudan çıkamayanlar için ek not: Yaptığım bir ASP.NET web uygulamasındaki temel ayarlar için JSON biçimini kullanıyorum. Dosyayı okudum, Newtonsoft kütüphanesiyle ayarlar nesnesine dönüştürdüm ve gerektiğinde kullanıyorum.

JSON dosyasının kendisinde her bir ayar hakkında yorum yazmayı tercih ediyorum ve kullandığım kütüphane tamam olduğu sürece gerçekten JSON formatının bütünlüğünü umursamıyorum.

Bunun ayrı bir 'settings.README' dosyası oluşturup içindeki ayarları açıklamaktan ziyade 'kullanımı / anlaşılması' kolay bir yol olduğunu düşünüyorum.

Bu tür kullanımla ilgili bir sorununuz varsa; Üzgünüm, cin lambadan çıktı. İnsanlar JSON biçimi için başka kullanımlar bulabilir ve bu konuda yapabileceğiniz hiçbir şey yoktur.


Birinin neden bir gerçeği belirtmekte sorun yaşayacağını anlamak zor.
dvdmn

Yukarıdaki JSON artık veya geçersiz JSON biri nedeniyle istisna aldı varsayalım. Belki de kısa bir feragatname eklenebilir.
araç çubuğu

5
Sana tamamen katılıyorum ve cevap vermemek için şu ana kadar açık olan 883 upvotes var. Yardımcı bilgilerin üstünde değerli ideolojik saflık, bu sizin için SO.
John

Nokta, yorumları JSON olmayan bir dosyadır ve birçok JSON kütüphanesi tarafından ayrıştırılamaz. Kendi programınızda istediğinizi yapmaktan çekinmeyin, ancak yorum içeren bir dosya JSON değildir. Eğer öyle olduğunu iddia ederseniz, insanlar onu kendi dilleri / kütüphaneleri ile ayrıştırmaya çalışacak ve başarısız olacaktır. Bu, XML'deki açılı ayraçlar yerine köşeli ayraç kullanıp kullanamayacağınızı sormak gibidir. Ne istersen yapabilirsin ama artık XML olmayacak.
gman

32

JSON'un arkasındaki fikir, uygulamalar arasında basit veri alışverişi sağlamaktır. Bunlar genellikle web tabanlıdır ve dil JavaScript'tir.

Verilerdeki ad / değer çiftlerinden biri olarak bir yorum iletmek kesinlikle işe yarayacaktır, ancak bu verilerin açıkça ayrıştırma kodu tarafından göz ardı edilmesi veya ele alınması gerektiği halde, yorumlara gerçekten izin vermez.

Bütün bunlar, JSON dosyasının geleneksel anlamda yorumlar içermesi gerektiği niyetinde değildir. Sadece veri olmalı.

Göz at JSON web Daha fazla ayrıntı için.


17
JSON biçiminin yorum içermediği doğrudur. Şahsen bunun önemli bir hata olduğunu düşünüyorum - meta veri (veri değil) olarak yorum yapabilme yeteneği xml ile çok yararlı bir şeydir. JSON spesifikasyonunun önceki taslak sürümleri yorum içeriyordu, ancak bir nedenle bırakıldı. : - /
StaxMan

4
@StaxManuel kullanıcılar meta veri olarak kullanmaya başladıkları için tam olarak bırakıldılar. Crockford, formatın tasarlandığı şeyin uyumluluğunu bozduğunu söyledi ve katılıyorum: meta veri istiyorsanız, neden gerçek veri olarak eklemiyorsunuz? Bu şekilde ayrıştırmak daha da kolay.
Camilo Martin

6
Meta veriler meta veri yapılarına (ör. HTML <meta> etiketleri) aittir, açıklamalara değil. Meta veriler için yorumları kötüye kullanmak, gerçek meta veri yapısının olmadığı yerlerde kullanılan bir saldırıdır.
Marnen Laibow-Koser

Tam olarak bırakılmasının nedeni de budur: meta veri olarak kullanılan yorumlar birlikte çalışabilirliği bozar. Meta verilerinizi sadece JSON olarak depolamanız gerekir.
gaborous

1
Bu cevap, daha önce yazılmış olsa bile, daha iyi yazılmış, daha yüksek oylanmış cevaplarla, aslında aynı şeyi söyleyen gereksizdir. Cest la vie.
araç çubuğu

29

Ben sadece yapılandırma dosyaları için bu karşılaşıyorum. XML (ayrıntılı, grafiksel, çirkin, okunması zor) veya "ini" biçimini (hiyerarşi yok, gerçek standart yok, vb.) Veya Java "Özellikler" biçimini (.ini gibi) kullanmak istemiyorum .

JSON yapabildikleri her şeyi yapabilir, ancak daha az ayrıntılı ve daha insan tarafından okunabilir - ve ayrıştırıcılar birçok dilde kolay ve her yerde bulunur. Sadece bir veri ağacı. Ancak bant dışı yorumlar genellikle "varsayılan" konfigürasyonları ve benzerlerini belgelemek için bir gerekliliktir. Konfigürasyonlar asla "tam doküman" olmamalıdır, ancak gerektiğinde insanlar tarafından okunabilen kaydedilmiş veri ağaçları.

Biri "#": "comment", "geçerli" JSON için kullanabilirsiniz sanırım .


4
Yapılandırma dosyaları için JSON yerine YAML öneririm. JSON'un (neredeyse) daha güçlü bir üst kümesidir, ancak yorumlar da dahil olmak üzere daha okunabilir yapıları da destekler.
Marnen Laibow-Koser

1
jami ile karşılaştırıldığında kaç dilde YAML'yi desteklediğini düşünüyorsunuz?
mmm

@Hamidam Bir düzineden fazla dil yaml: yaml.org'u destekliyor. Ruby 1.9.2'nin yaptığı gibi. Başkalarını bilen var mı? Ve hangi diller varsayılan olarak json için destek gönderir?
nealmcb

5
YAML birlikte çalışma bir yalandır: stackoverflow.com/questions/450399/… . İçgüdünüz yapılandırma dosyaları için JSON kullanmaksa, onu izleyin.
araç çubuğu

Bu eski, ama # kullanmanın iyi bir fikir olmadığına inanıyorum. Json bir Javascript litteral sözdizimine yakındır. Javascript 2 yorum türünü destekler: // ve / * ... * / Ben olsaydım bu yorum türlerinden birine ya da ikisine birden yapışırdım.
Pascal Ganaye

28

JSON yorumları yerel olarak desteklemez, ancak yorumları çözmek için kendi kod çözücünüzü veya en azından ön işlemcinizi oluşturabilirsiniz, bu mükemmel bir şekilde iyi (sadece yorumları görmezden geldiğiniz ve uygulamanızın JSON verilerini nasıl işlemesi gerektiğini yönlendirmek için kullanmamanız durumunda) ).

JSON adlı kullanıcının yorumu yok. Bir JSON kodlayıcı yorum YAPMAMALIDIR. Bir JSON dekoderi yorumları kabul edebilir ve yok sayabilir.

Yorumlar asla anlamlı bir şey iletmek için kullanılmamalıdır. JSON bunun içindir.

Cf: Douglas Crockford, JSON spec .


4
Crockford daha sonra şunları yazmaya devam etti: "Varsayalım, açıklama eklemek istediğiniz yapılandırma dosyalarını saklamak için JSON kullandığınızı varsayalım. Devam edin ve beğendiğiniz tüm yorumları ekleyin. Ardından JSON ayrıştırıcısına teslim etmeden önce JSMin ile paylaşın." Daha fazla bilgi için @ kyle-simpson'ın JSON ile ilgili cevabına bakınız.
araç çubuğu


27

JSON, yapılandırma dosyaları ve diğer yerel kullanım için çok anlamlı çünkü her yerde ve XML'den çok daha basit.

Kişilerin verileri iletirken (geçerli olsun ya da olmasın) JSON'da yorum yapmamaları için güçlü nedenleri varsa, muhtemelen JSON ikiye bölünebilir:

  • JSON-COM: Kablodaki JSON veya JSON verilerini iletirken uygulanan kurallar.
  • JSON-DOC: JSON belgesi veya dosyalarda veya yerel olarak JSON. Geçerli bir JSON belgesi tanımlayan kurallar.

JSON-DOC yorumlara izin verir ve boşlukları yönetmek gibi diğer küçük farklılıklar olabilir. Ayrıştırıcılar bir özellikten diğerine kolayca dönüştürebilir.

Douglas Crockford'un bu konularda yaptığı açıklama ile ilgili olarak (@Artur Czajka tarafından referansta bulunulan)

Ek açıklama eklemek istediğiniz yapılandırma dosyalarını saklamak için JSON kullandığınızı varsayalım. Devam edin ve istediğiniz tüm yorumları ekleyin. Sonra JSON ayrıştırıcısına teslim etmeden önce JSMin üzerinden boru.

Genel bir yapılandırma dosyası sorunu (çapraz dil / platform) hakkında konuşuyoruz ve JS'ye özgü bir yardımcı programla yanıt veriyor!

JSON'a özel bir küçültmenin herhangi bir dilde uygulanabileceğinden emin olun, ancak bunu standartlaştırın, böylece tüm dillerde ve platformlarda ayrıştırıcılar arasında her yerde her yerde bulunur, böylece insanlar özellik için eksik zamanlarını boşa harcarlar, çünkü sorunu iyi ararlar. çevrimiçi forumlarda ve kullanıcıların onlara bunun kötü bir fikir olduğunu söylemesi veya metin dosyalarından sıyırma yorumlarını uygulamanın kolay olduğunu öne sürmesini sağlamak.

Diğer konu birlikte çalışabilirliktir. Bir kütüphane veya API'nız veya onunla ilişkili bazı yapılandırma veya veri dosyaları olan herhangi bir alt sisteminiz olduğunu varsayalım. Ve bu alt sisteme farklı dillerden erişilecek. Sonra insanlara söylemeye mi gidiyorsunuz? Bu arada, ayrıştırıcıya iletmeden önce JSON dosyalarındaki yorumları çıkarmayı unutmayın!


JSON'u parçalamaya gerek yok. Yorumlu JSON artık JSON değil. Ancak, ayrıştırmadan veya iletmeden önce bunları çıkardığınızdan emin olduğunuz sürece, JSON'unuza yorumlarla açıklama eklemek tamamen kabul edilebilir. Bunu yapmak asla alıcının sorumluluğunda olmamalıdır.
araç çubuğu

json5.org json-doc için bir çözümdür
Michael Freidgeim

24

JSON5 kullanıyorsanız yorum ekleyebilirsiniz.


JSON5, insanların elle yazmasını ve bakımını yapmasını kolaylaştıran JSON'un önerilen bir uzantısıdır . Bunu doğrudan ECMAScript 5'ten en az sözdizimi özellikleri ekleyerek yapar.


5
Lütfen bir örnek ekleyebilir misiniz? O zaman bu ekstra karakterlere ihtiyacınız olabilir.
dgilperez

6
SO yönergelerinin gerçek bir cevap vermesi gerekir. Yalnızca bağlantı yanıtları istenmez. Yönergeleri kontrol edebilirsiniz stackoverflow.com/help/how-to-answer
dgilperez

2
SO kullanıcıları tarafından yönetilir. Bu, eğer aynı kurallara sahipsem yönergelere uymazsa sizinkine yorum yapabileceğim gibi bir cevap verebileceğim anlamına gelir. SO böyle harika bir kaynak olur.
dgilperez

22

Dojo Araç Seti JavaScript araç seti (en azından 1.4 sürümünden itibaren), JSON'unuza yorum eklemenize olanak tanır. Yorumlar /* */biçiminde olabilir. Dojo Toolkit, JSON'udojo.xhrGet() çağrı .

Diğer JavaScript araç setleri de benzer şekilde çalışabilir.

Bu, son bir seçenek seçmeden önce alternatif veri yapıları (hatta veri listeleri) ile denemeler yaparken yardımcı olabilir.


4
Hayır. Bu değil. JSON adlı kullanıcının yorumu yok. JSON'unuza yorum ekleyerek açıklama eklemeyi seçerseniz, ayrıştırmadan veya iletmeden önce küçültün. Bu alıcının sorumluluğu olmamalıdır.
araç çubuğu

2
JSON'un yorumları olduğunu söylemedim. Bunları JSON'unuza, özellikle de bir üretim sistemine dahil etmenin uygun olduğunu ima etmek istemedim. Ben söyledi Dojo araç yaşanmış bir gerçektir (ya da en azından, idi) hangi eklemek için izin verir. Test aşamasında bunu yapmak için çok yararlı kullanım örnekleri vardır.
David

1
Yorum yapmak hizmet etmek kötü voodoo ve bu nedenle dojo.xhrGet()kabul ederek dolaylı olarak teşvik eden geçersiz JSON .
araç çubuğu

Hala yorumlara izin vermek için JSON spec yükseltmek için oy. Ben JSON iletmeden önce yorumları minimize ve sıyırma için değilim, ama ayrıştırmadan önce ayrı bir yardımcı program üzerinden geçmek zorunda kalmadan herhangi bir standart şekilde JSON yorum yapmak için herhangi bir yeteneği yok sadece aptalca görünüyor. Ayrıca, dosyalarınız geçerli JSON olmadığından JSON yapılandırma dosyalarınızda bir JSON düzenleyicisi kullanmayı imkansız hale getiriyorum.
Craig

20

JSON çerçeveli bir protokol değildir . Dilsiz bir formattır . Dolayısıyla, JSON için bir yorumun biçimi tanımlanmamıştır.

Birçok kişinin önerdiği gibi, bazı hileler vardır, örneğin, yinelenen anahtarlar veya _commentkullanabileceğiniz belirli bir anahtar . Sana kalmış.


18

Sen edebilirsiniz içinde yorumlarınız JSONP değil saf JSON. Programımın Highcharts'tan bu örnekle çalışmasını sağlamak için bir saat geçirdim: http://www.highcharts.com/samples/data/jsonp.php?filename=aapl-c.json&callback=?

Bağlantıyı takip ederseniz, göreceksiniz

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

Yerel klasörümde benzer bir dosya bulunduğundan, Aynı menşe politikasıyla ilgili herhangi bir sorun yoktu , bu yüzden saf JSON kullanmaya karar verdim ... ve elbette, $.getJSONyorumlar nedeniyle sessizce başarısız oluyordu.

Sonunda yukarıdaki adrese manuel bir HTTP isteği gönderdim ve içerik türünün text/javascriptJSONP'nin saf JavaScript döndürdüğünden beri fark ettim . Bu durumda yorumlara izin verilir . Ancak uygulamam içerik türü döndürdü application/json, bu yüzden yorumları kaldırmak zorunda kaldım.


17

Bu bir "yapabilir misin" sorusudur. Ve işte "evet" yanıtı.

Hayır, yan kanal verilerini JSON kodlamasına doldurmak için yinelenen nesne üyelerini kullanmamalısınız. ( "Bir nesne içinde adları benzersiz olmalıdır *" bölümüne bakınız RFC ).

Ve evet, JSON'un etrafına ayrıştırabileceğiniz yorumlar ekleyebilirsiniz .

Ancak, geçerli bir JSON'a rastgele yan kanal verileri eklemek ve çıkarmak için bir yol istiyorsanız, işte bir cevap. Bir JSON kodlamasında verilerin benzersiz olmayan sunumundan yararlanıyoruz. Buna "altı yapısal karakterden herhangi birinden önce veya sonra boşluk bırakılabilir" başlığı altında RFC'nin ikinci bölümünde * izin verilir.

* RFC yalnızca "altı yapısal karakterden herhangi birinden önce veya sonra boşluklara izin verilir" ifadesini belirtir; açıkça dizelerden, sayılardan, "false", "true" ve "null" dan bahsetmez. Bu ihmal TÜM uygulamalarda göz ardı edilmektedir.


İlk olarak, JSON'unuzu küçülterek standartlaştırın:

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

Ardından yorumunuzu ikili olarak kodlayın:

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

Ardından ikili dosyalarınızı yönlendirin:

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

İşte çıktı:

$jsonWithComment = $steg . $jsonMin;

1
RFC yalnızca "altı yapısal karakterden herhangi birinden önce veya sonra boşluklara izin verilir" ifadesini belirtir; dizelerden, sayılardan, "false", "true", "null" 'dan açıkça bahsetmez. Bu ihmal TÜM uygulamalarda göz ardı edilmektedir.
William Entriken

1
Daha fazla yorum yoğunluğu için, yorumunuzu üçlü olarak kodlayamadınız ve adım atmak için boşluk, sekme ve yeni satır kullanamaz mısınız?
Claire Nielsen

ZORUNLU OLMAMALIDIR. Açıkça dahil edilen RFC 2119'a bakın: ZORUNLU: Bu sözcük veya "GEREKLİ" veya "SHALL" terimleri, tanımın belirtimin mutlak bir gereksinimi olduğu anlamına gelir. ... ZORUNLU: Bu kelime veya "ÖNERİLEN" sıfatının, belirli durumlarda belirli bir öğeyi göz ardı etmek için geçerli nedenler olabileceği anlamına gelir, ancak farklı bir ders seçilmeden önce tüm çıkarımların anlaşılması ve dikkatle tartılması gerekir.
Jeff K

İyi referans. Yinelenen anahtarların kullanılmasına karşı daha iyi bir gerekçe, standardın "Bir nesne içindeki adlar benzersiz olmadığında, böyle bir nesneyi alan yazılımın davranışı tahmin edilemez" ifadesidir. Ayrıca şimdi standardın neden "benzersiz olması GEREKİR" olmadığını anlıyorum, bu bir doğrulayıcıyı daha basit hale getiriyor, sadece izlemesi gerekiyor [ve {, zaten hangi tuşların kullanıldığını bilmesine gerek yok.
William Entriken

16

YASAL UYARI: BU SILLY

Aslında yorum eklemek ve spec içinde kalmak için bir yol var (ek ayrıştırıcı gerekmez). Yine de herhangi bir ayrıştırma olmaksızın okunabilir yorumlarla sonuçlanmaz.

Aşağıdakileri kötüye kullanabilirsiniz:

Herhangi bir jetondan önce veya sonra önemsiz boşluklara izin verilir. Boşluk, aşağıdaki kod noktalarından bir veya daha fazlasının herhangi bir dizisidir: karakter tablolaması (U + 0009), satır besleme (U + 000A), satır başı (U + 000D) ve boşluk (U + 0020).

Saldırgan bir şekilde, yorum eklemek için bunu kötüye kullanabilirsiniz. Örneğin: yorumunuzu bir sekmeyle başlatın ve bitirin. Yorumu base3 olarak kodlayın ve diğer beyaz boşluk karakterlerini kullanarak bunları temsil edin. Örneğin.

010212 010202 011000 011000 011010 001012 010122 010121 011021 010202 001012 011022 010212 011020 010202 010202

(hello base three ASCII'de) Ancak 0 yerine boşluk kullanın, 1 satır besleme ve 2 satır taşıyıcı kullanın.

Bu size çok fazla okunamayan boşluk bırakacaktır (onu IDE eklentisini anında kodlamak / kodunu çözmek için yapmazsanız).

Bunu hiçbir zaman denemedim, bariz nedenlerle ve sen de yapmamalısın.


12

strip-json-commentsProjemiz için kullanıyoruz . Gibi bir şeyi destekler:

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

Basitçe npm install --save strip-json-commentskurmak ve kullanmak için:

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

jsonBu uygun yorumları içerdiğinde artık geçerli bir JSON olmadığını unutmayın .
Roy Prins

12

Benim durumumda, JSON yapısının çıkışından önce hata ayıklama amacıyla yorumları kullanmam gerekiyor. Bu yüzden istemciyi kırmamak için HTTP üstbilgisinde hata ayıklama bilgilerini kullanmaya karar verdim:

header("My-Json-Comment: Yes, I know it's a workaround ;-) ");

Resim açıklamasını buraya girin


12

JSON kendi başına yorumlara izin vermez. Muhakeme JSON kullanamaması için tamamen aptalca kendisini tamamen muhakeme ortadan kaldırır hangi, yorum oluşturmak için, ve yükler için hiç sebepsiz ayrıştırıcı veri alanı tam olarak aynı sonucu ve bunlar gibi potansiyel sorunlar,: JSON yorum içeren dosya.

( //Veya /* */veya kullanarak) yorum koymaya çalışırsanız #, bazı ayrıştırıcılar başarısız olur, çünkü bu kesinlikle JSON belirtimi dahilinde değildir. Yani bunu asla yapmamalısın .

Örneğin, görüntü işleme sistemimin görüntü gösterimlerini ve bunlarla ilgili bazı temel biçimlendirilmiş (yorum) bilgileri kaydettiği bir örnek :

{
    "Notations": [
        {
            "anchorX": 333,
            "anchorY": 265,
            "areaMode": "Ellipse",
            "extentX": 356,
            "extentY": 294,
            "opacity": 0.5,
            "text": "Elliptical area on top",
            "textX": 333,
            "textY": 265,
            "title": "Notation 1"
        },
        {
            "anchorX": 87,
            "anchorY": 385,
            "areaMode": "Rectangle",
            "extentX": 109,
            "extentY": 412,
            "opacity": 0.5,
            "text": "Rect area\non bottom",
            "textX": 98,
            "textY": 385,
            "title": "Notation 2"
        },
        {
            "anchorX": 69,
            "anchorY": 104,
            "areaMode": "Polygon",
            "extentX": 102,
            "extentY": 136,
            "opacity": 0.5,
            "pointList": [
                {
                    "i": 0,
                    "x": 83,
                    "y": 104
                },
                {
                    "i": 1,
                    "x": 69,
                    "y": 136
                },
                {
                    "i": 2,
                    "x": 102,
                    "y": 132
                },
                {
                    "i": 3,
                    "x": 83,
                    "y": 104
                }
            ],
            "text": "Simple polygon",
            "textX": 85,
            "textY": 104,
            "title": "Notation 3"
        }
    ],
    "imageXW": 512,
    "imageYW": 512,
    "imageName": "lena_std.ato",
    "tinyDocs": {
        "c01": "JSON image notation data:",
        "c02": "-------------------------",
        "c03": "",
        "c04": "This data contains image notations and related area",
        "c05": "selection information that provides a means for an",
        "c06": "image gallery to display notations with elliptical,",
        "c07": "rectangular, polygonal or freehand area indications",
        "c08": "over an image displayed to a gallery visitor.",
        "c09": "",
        "c10": "X and Y positions are all in image space. The image",
        "c11": "resolution is given as imageXW and imageYW, which",
        "c12": "you use to scale the notation areas to their proper",
        "c13": "locations and sizes for your display of the image,",
        "c14": "regardless of scale.",
        "c15": "",
        "c16": "For Ellipses, anchor is the  center of the ellipse,",
        "c17": "and the extents are the X and Y radii respectively.",
        "c18": "",
        "c19": "For Rectangles, the anchor is the top left and the",
        "c20": "extents are the bottom right.",
        "c21": "",
        "c22": "For Freehand and Polygon area modes, the pointList",
        "c23": "contains a series of numbered XY points. If the area",
        "c24": "is closed, the last point will be the same as the",
        "c25": "first, so all you have to be concerned with is drawing",
        "c26": "lines between the points in the list. Anchor and extent",
        "c27": "are set to the top left and bottom right of the indicated",
        "c28": "region, and can be used as a simplistic rectangular",
        "c29": "detect for the mouse hover position over these types",
        "c30": "of areas.",
        "c31": "",
        "c32": "The textx and texty positions provide basic positioning",
        "c33": "information to help you locate the text information",
        "c34": "in a reasonable location associated with the area",
        "c35": "indication.",
        "c36": "",
        "c37": "Opacity is a value between 0 and 1, where .5 represents",
        "c38": "a 50% opaque backdrop and 1.0 represents a fully opaque",
        "c39": "backdrop. Recommendation is that regions be drawn",
        "c40": "only if the user hovers the pointer over the image,",
        "c41": "and that the text associated with the regions be drawn",
        "c42": "only if the user hovers the pointer over the indicated",
        "c43": "region."
    }
}

"Muhakeme" bağlantısı kopuk. Güncel bir bağlantı bulma şansınız var mı?
Don Hatch

Don, maalesef Google bu yazıyı içeren sosyal medya sistemini öldürdü; Orjinal posterin oradan nereye gittiğine dair hiçbir fikrim yok, her yerde. Bununla birlikte, belirsizliği gidermek için yukarıdaki bilgilerdeki bağlantıyı öldüreceğim. Teşekkürler.
fyngyrz

Akıl yürütme aptalca değildir ve bunu kanıtladınız. Yorumları etiket olarak uygulamak, birlikte çalışabilirliği korur . Bu tam Crockford etiketleri olarak ayrıştırılması için bir yorum istedi neden. Şimdi her şey sadece bir etiket ve aynı şekilde ayrıştırıldı .
Dominic Cerisano

Spesifikasyon "# ile başlayan bir satır bir yorumdur" ifadesini kullansaydı, bu tamamen birlikte çalışabilir olurdu . Durum olarak, yorumlar ayrıştırıcı alanını yükler, çünkü bunlar yorum olarak anlaşılmak yerine geçerli ayrıştırılmış öğelerdir ve var olan her .json dosyası için farklı olabilir. Spesifikasyon (örneğin) "# ile başlayan satırlar yorum" ise, ayrıştırıcılar bu satırları ayrıştırmadan (daha hızlı) atlayabilir ve ayrıştırıcı alanını yükleyemez (daha iyi bellek kullanımı). .json'daki yorumların sadece dezavantajları.
fyngyrz

11

Bir JSON öğesini parçalara kesmek için "kukla yorum" satırları ekliyorum:

{

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

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

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

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

}

15
JSON'da bir INI dosya yapısı taklit ettiniz. Lütfen, Altın Çekici'nizi indirin.
Artur Czajka

4
RFC "Bir nesne içindeki isimler benzersiz olmalıdır" diyor. Ayrıca yukarıdaki gibi JSON ayrıştırma hatası olan bu kişiye bakın: stackoverflow.com/questions/4912386/…
William Entriken

JSON'u doğrulamak için bir şema kullanıyorsanız, ek alanlar nedeniyle başarısız olabilir.
gregsdennis

1
JSON'unuza yorum eklemeye gerçekten kararlıysanız, böyle bir şey yapmak çok daha mantıklı olacaktır: { "comment-001":"This is where you do abc...", "comment-002":"This is where you do xyz..." } Bu, adı benzersiz tutar ve istediğiniz dize değerini eklemenizi sağlar. Hala bir çamur, çünkü yorumlar JSON'unuzun bir parçası olmamalı. Başka bir alternatif olarak, neden JSON'unuzdan önce veya sonra yorum eklemiyorsunuz?
Jazimov
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.