Soru Yorumlar JSON'da kullanılabilir mi?


Bir JSON dosyasındaki yorumları kullanabilir miyim? Öyleyse nasıl?


5797
2017-10-28 20:39


Menşei


@StingyJack: Açıkça görülmeyen şeyleri veya yorumlarla başka neler yapabileceğini açıklamak. Ben sık sık veri dosyalarında yorumlarınız var. XML, ini dosyaları ve diğer birçok format yorumlar için hükümler içerir. - Michael Burr
Eğer sen benim gibi olsaydın //comments Bir Sublime Text yapılandırma dosyasının özel kullanım durumu için sorun yok, cevap evet (versiyon 2'den itibaren). Yüce Metin, en azından şikayette bulunurken, bundan şikayet etmeyecektir. {"__comment": ...} konsolda, beklenmedik bir alan olduğu için. - hangtwenty
ve belki de bu TOML'ın yaratılmasının bir nedeni .. - Alex Nolasco
Biraz noobish ama ben de JSON yorumlarda // kullanarak çalıştı. Şimdi kavşak / takas için kesinlikle kullanıldığını anlıyorum. İç çekmek! Daha fazla yorum yapamam :(. Hayat mahvoldu !. - Sid
JSON5 yorumları destekliyor: stackoverflow.com/a/7901053/108238 - schoetbi


Cevaplar:


Yok hayır.

JSON, hepsi birer veri olmalı ve bir yorum eklerseniz, o zaman veriler de olacaktır.

Adlandırılmış bir veri elemanına sahip olabilirsiniz "_comment" JSON verilerini kullanan uygulamalar tarafından yok sayılacak (veya bir şey).

JSON'u oluşturan / alan süreçlerde, JSON verilerinin önceden ne olacağını veya en azından yapısının ne olduğunu bilmeleri gerektiği gibi, yorumlara sahip olmanız muhtemelen daha iyi olacaktır.

Ama eğer karar verdiysen:

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

4066
2017-10-28 21:01



Yorum olarak adlandırılan geçerli bir alanın olması durumunda, gerçek yorumda bir çeşit önek bulundurmak için ödeme yapabilir: "__comment":"comment text goes here...", - Rob Fonseca-Ensor
JSON’ta neden yorum yapılmadığının (veya daha doğrusu, neden erken kaldırıldıklarına dair) son zamanlarda yapılan bir açıklama / gerekçe: plus.google.com/118095276221607585885/posts/RK8qyGVaGSr Ayrıca bkz. tech.groups.yahoo.com/group/json/message/156 ve bu konudaki diğer tartışmalar. - Michael Burr
BTW, Java için json kütüphanesi google-GSON Yorumlar için destek var. - centic
Ne hakkında ayrı bir yorum yapmak isteseydim? Accronym ve Abbrev özellikleri? Bu modeli daha önce kullandım ama bunu yapmama izin vermediği için durdum. Bu bir hack. Belki de bir mülk adıyla başlarım __comment__ yerine. Bu "__comment__Abbrev", hala bir hack, ama tüm prpoerties hakkında yorum yapmama izin verir - Juan Mendes
Ayrıca "//" kullanabilirsiniz: Bu daha yerel görünüyor ve hala aynı ebeveynde tekrarlanabilir - smnbbrv


Yok hayır, formun yorumları //… veya /*…*/ JSON'a izin verilmez. 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 7159 JavaScript Nesne Gösterimi (JSON) Veri Değişim Biçimi - Obsoletes: 4627, 7158

1569
2017-11-15 09:32



JSON'nuza yorum ekleyerek (bu yüzden geçersiz JSON yapar) not eklemek isterseniz, ayrıştırmadan veya iletmeden önce küçültün. Crockford kendisini 2012'de konfigürasyon dosyaları bağlamında kabul etti. - toolbear
@alkuzad: Resmi dilbilgisi söz konusu olduğunda, açıkça belirten bir şey olmalı. Hangi izin, başka bir şekilde değil. Örneğin, programlama dilinize göre seçim yapın: İstenilen (ancak eksik) bir özellik açıkça izin verilmediğinden, derleyicinizin onu sihirli bir şekilde tanıyacağı anlamına gelmez. - stakx
Evet. JSON formatı, öğeler arasında çok fazla ölü boşluğa sahiptir ve bu bölgelerdeki alanlara duyarsızdır. Bu nedenle, orada tek veya çok satırlı yorum yapamayacağınız için bir neden yoktur. Birçok ayrıştırıcı ve minyatür öğesi JSON yorumlarını da destekler, bu yüzden ayrıştırıcınızın bunları desteklediğinden emin olun. JSON uygulama verileri ve konfigürasyon ayarları için çok kullanıldı, bu yüzden yorumlar şimdi gerekli. "Resmi spekülasyon" güzel bir fikir, ama yetersiz ve modası geçmiş, çok kötü. Yük boyutu veya performansı konusunda endişeleriniz varsa JSON'unuzu küçültün. - Triynko
Cevabınız kesinlikle doğru olsa da, bunun BS olduğu söylenmelidir. Json konfigürasyonuna ihtiyaç duyan çok sayıda son kullanıcı ile, yorumlar son derece faydalıdır. Çünkü bazı kalaylı şapkalar JSON'a karar verdi. olduğu ve her zaman olmalı Makinenin okunabilir olması, insanların okumak zorunda olduğu gerçeğini görmezden gelmek, küçük fikirli bir travesti değildir. - cmroanirgo
@cmroanirgo: JSON'un bu sınırlandırmasından şikayet eden ilk kişi siz değilsiniz ... bu yüzden sessizce yorumlara izin veren ayrıştırıcılara ve YAML ve JSON5 gibi diğer formatlara sahibiz. Ancak bu, JSON'un ne olduğu gerçeğini değiştirmez. Daha ziyade, insanların, söz konusu sınırlama dikkate alındığında, ilk etapta açıkça yeterli olmadığı yerlerde JSON kullanmaya başladıklarını ilginç buluyorum. JSON formatını suçlama; Özellikle iyi bir uyum göstermediği yerde ısrar etmek için kendimizi suçluyoruz. - stakx


Seçerseniz yorumları ekleyin; Ayrıştırma veya aktarmadan önce onları bir kıyma cihazı ile soyma.

Yeni çıktım JSON.minify () hangi bir JSON bloğundan yorumlar ve boşluklar çıkarır ve ayrıştırılabilen geçerli bir JSON yapar. Yani, onu şöyle kullanabilirsin:

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

Ben onu serbest bıraktığımda, insanların fikriyle bile aynı fikirde olmayan büyük bir tepki aldım, bu yüzden neden kapsamlı bir blog yazısı yazacağına karar verdim. yorumlar JSON'da anlamlı. JSON'un oluşturucusundan bu önemli yorumu içerir:

Not eklemek istediğiniz yapılandırma dosyalarını tutmak için JSON kullandığınızı varsayalım. Devam edin ve beğendiğiniz yorumları ekleyin. Daha sonra JSON ayrıştırıcınıza göndermeden önce JSMin ile boru. - Douglas Crockford, 2012

Umarım bu, neden aynı fikirde olmayanlara yardımcı olur JSON.minify () yararlı olabilir.


678
2018-06-23 18:20



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ürüyor ve 0,06 saniye sürüyor. - WizKid
önerilen alternatif algoritmayı JSON.minify () için github repo'una gönderebilmeniz harika olurdu, böylece desteklenen tüm bağlantı noktalarına yönlendirilebilir: github.com/getify/json.minify - Kyle Simpson
@MiniGod Doug'un bu konudaki düşüncelerini defalarca duymuştum. Onları çoktan önce blog yayınımda ele aldım: blog.getify.com/json-comments - Kyle Simpson
@ MarnenLaibow-Koser, veri akışı (hatta paket) kullanımı için bile geçerli yorumlar için hala geçerli kullanımlardır: tanılama meta verilerinin yaratılış zamanı veya kaynakları gibi eklenmesi XML ile ortak kullanımdır ve JSON verileri için de oldukça hassastır. Yorumlara karşı argümanlar sığdır ve herhangi bir metinsel veri formatı, ima edilen kullanımdan bağımsız olarak yorum yapılmasına izin vermelidir (herhangi bir özellik, JSON'un başka bir yerde kullanılamaz, fwiw olduğunu önermez) - StaxMan
Eğer JSON evrensel kabul görecekse (ki bu temelde yapar) o zaman evrensel bir uygulamaya sahip olmalıdır. Örnek: JSON bir uygulama yapılandırma dosyası olarak hizmet verebilir. Bu uygulama yorumları arzu eder. - eggmatters


Yorumlar, tasarım tarafından JSON'dan kaldırıldı.

JSON'dan yorumları kaldırdım çünkü insanların onları birlikte çalışabilirliği bozacak bir ayrıştırma yönergesi olarak kullandıklarını gördüm. Yorumların yokluğunun bazı insanları üzdüğünü biliyorum, ama yapmamalı.

Not eklemek istediğiniz yapılandırma dosyalarını tutmak için JSON kullandığınızı varsayalım. Devam edin ve beğendiğiniz yorumları ekleyin. Daha sonra JSON ayrıştırıcınıza göndermeden önce JSMin ile boru.

Kaynak: G + 'da Douglas Crockford tarafından yapılan genel açıklama


379
2018-06-11 08:52



JSON'un XML'den daha fazla insan tarafından okunabilir olması gerektiğini düşünmüştüm. Yorumlar okunabilirlik içindir. - intrepidis
Her neyse, yaramaz olabilir ve JSON: {"__directives": {"# n #": "DateTime.Now"}, "validdate": "# n #"} ayrıştırma direktifleri ekleyebilirsiniz ... YAML'a benziyor ileriye giden yol ... - intrepidis
Kişisel görüş: yorumlara izin vermemek IS. Yapılandırma dosyalarımın kodunu çözmek için yorumları göz ardı eden standart olmayan bir JSON ayrıştırıcısı oluşturmaktan başka seçeneğim yoktu. - caiosm1005
@ArturCzajka Ben hala JSON yorumları desteklemiyor, ama INI bir denemeyi ve ben yapılandırma dosyaları için JSON üzerinden bunları kullanmak için çok daha mantıklı olduğunu itiraf etmeliyim. Yanıt için teşekkürler ve umarım daha fazla kişi bu konuşmayı okuduğunda fikrini değiştirir. (ayrıştırıcı yapmak zaten bir egzersiz daha yapıldı :) - caiosm1005
Bu, tüm bisikletlerin eğitim tekerleklerine sahip olmasını gerektiriyor, çünkü bazı insanlar bisiklet kullanamaz. Önemli bir özelliği kaldırmak aptal insanlar kötüye kullanması nedeniyle kötü bir tasarımdır. Bir veri formatı, sadakatsiz olarak kullanılabilirliği önceliklendirmelidir. - Phil Goetz


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

Belirtildiği gibi, bu hack, özelliklerin uygulanmasından yararlanır. Tüm JSON ayrıştırıcıları bu JSON türünü anlayamaz. Özellikle akarsu akışları boğulur.

Bu ilginç bir merak, ama sen gerçekten hiç bir şey için kullanmamalı. Asıl cevabı aşağıdadır.


Ayrışmayı etkilemeyecek veya herhangi bir şekilde temsil edilen verileri değiştirecek bir JSON dosyasına yorum yapmanıza izin veren küçük bir hack buldum.

Bir nesne değişmezini bildirirken aynı tuşa sahip iki değer belirtebilir ve sonuncusu önceliklidir. İster inanın ister inanmayın, JSON ayrıştırıcılarının aynı şekilde çalıştığı ortaya çıkıyor. Bu yüzden, ayrıştırılmış bir nesne gösterimi içinde bulunmayacak olan kaynak JSON'da yorum 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 yorumlanmış 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. Onu ayrıştırırsanız, şöyle bir nesne alırsınız:

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

Bu, yorumların izinin olmadığı anlamına gelir ve garip yan etkileri olmayacaktır.

Mutlu hack!


192
2017-08-02 13:46



itibaren şartname: Bir nesnenin içindeki isimlerin benzersiz olması GEREKİR. - Quentin
"tüm uygulamalar bunu aynı şekilde ele alıyor" - Bunu kanıtlamak zor bir şey. - Quentin
JSON'daki öğelerin sırası garanti edilmez. Yani "son" madde değişebilir! - sep332
Bu açıkça spec (yukarıdaki yorumlara bakınız) ihlal, bunu yapmayın. ietf.org/rfc/rfc4627.txt?number=4627 - voidlogic
YOK HAYIR - çözümleyici akış halindeyse ne olur? Çözümleyici, anahtar siparişinin tanımlanmadığı bir sözlüke okursa ne olur? bunu ateşle öldür. - deanWombourne


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

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

Hjson intro

Görmek hjson.org JavaScript, Java, Python, PHP, Rust, Go, Ruby ve C # kütüphaneleri için.


123
2018-03-20 15:26



Upvoted. Belli ki, açık olmayan muhafazakar insanlar nefret etmekten hoşlanacaklardı. Umarım uygulamanız daha da bilinir - ve belki de orijinalden daha popüler olur;) Umarım birileri de Ruby ile de uygular. @adelphus İyi tanımlanmış olan dil, kendi bakış açınız veya fikrinizdir. Eğer muhafazakar bir "geliştirici" olmak, daha iyi olduğunuzu kanıtlamaz ve kendinizi sınırlı alanlarda kilitli tutmakta daha da kötü olabilirsiniz. İnsanları korkunç geliştiriciler olarak kolayca değerlendirmeyin. - konsolebox
Bunun için üzgünüm, Konsolebox. Belki de okuduktan sonra "iyi tanımlanmış JSON senin fikrin" görüşünü tekrar gözden geçirebilirsin ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf Gerçek bir standarttır ve kendi "özel" versiyonlarını uygulayan devler parçalanma, karışıklık ve çok fazla zaman harcanmasına yol açar. Her tarayıcı, standartların biraz farklı sürümleri uyguladığı için kod yazarken karmakarışık geliştiricilerin kaldığı web sitesine bakın. JSON dili mükemmel olmayabilir, ancak parçalanma daha kötüdür. Ve evet, bu sadece bir fikir ve katılmaya özgürsünüz. - adelphus
Senin sevgine hayranım ama YAML'ı yeniden icat ediyorsun. Çok esneklik ve insan okunabilirliği istiyorsanız, YAML kullanın (aslında: stackoverflow.com/questions/450399/...) veya curmudgeony, ama kesin JSON ile sopa. - toolbear
En kullanıcı dostu yapılandırma formatının hala INI olduğunu buldum. Bu çok basit ve çok sözdizimi ağır değil. Bu, kullanıcıların yalnızca yapılandırma havuzundaki parmaklarını kıstırdıkları için daha az göz korkutucu hale getirir. - Matt
Json'u yapılandırma olarak istediğiniz zaman (yorumlarda) Hangi gerekli) - ".js" yerine dosyanızı ".js" olarak adlandırın .. js elbette herhangi bir geçerli json nesnesini ele alabilir ve ek olarak kutu yorumları ele alalım .. "webpack.config.js" nin "webpack.config.json" olmasın nedeni de budur (web paketinde de bunun için çok daha fazla neden var: P) - jebbie


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

JSON, söz konusu sayfada görüntülenen sözdizimini içerir. Yorumlar hakkında bir not yok.


95
2017-10-28 20:42





YAML kullanmayı düşünün. Neredeyse bir JSON süpersetidir (hemen hemen tüm geçerli JSON geçerli YAML'dir) ve yorumlar sağlar.


86
2017-08-31 02:24



@ g33kz0r Doğru, dolayısıyla JSON'a yakın bir süperset olarak YAML açıkladığım. - Marnen Laibow-Koser
@NateS Birçok kişi zaten cevabın hayır olduğuna işaret etmişti. OP'nin hedefine ulaşmak için daha iyi bir yol önerdim. Bu bir cevap. - Marnen Laibow-Koser
Dezavantajı: yaml kütüphane Python ile gönderilmez. - Bleeding Fingers
@BleedingFingers Bu yüzden yükleyin ... - Marnen Laibow-Koser
@ marnen-laibow-koser: yup, Java ve Perl için mevcut YAML kitaplıklarını kullanmakta yetersiz kalmalı ve her birinin ürettiği YAML'ın hata yapmadan diğeri tarafından tüketilmesini beklemeliydiniz. Bu YAML interop bir sorun oldu, ama JSON interop değildi, tamamen benim bilgi eksikliği ile açıkladı. - toolbear


Yazmalısın JSON şeması yerine. JSON şeması şu anda bir Internet taslak belirtimidir. Dokümantasyonun yanı sıra şema, JSON verilerinizi doğrulamak için de kullanılabilir.

Örnek:

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

Kullanarak dokümantasyon sağlayabilirsiniz. açıklama şema özniteliği.


55
2017-07-28 18:38



JSON şeması yaşıyor mu? Var, ancak bilinen herhangi bir kütüphane tarafından destekleniyor mu? - Munhitsu
Evet json şema google grubu oldukça aktif ve tavsiye ederim JSV JSON Schema validator'un iyi bir JavaScript uygulaması için. - raffel
Bu sadece yapılandırılmış belgelere, geçici belgelere değil yardımcı olur - Juan Mendes
Eğer clojure kullanırsanız (ve emin değilsiniz) burada açık kaynak kodlu bir JSON şema ayrıştırıcısı var: github.com/bigmlcom/closchema - charleslparker
@Munhitsu Manatee.Json (.Net) JSON şemasını kapsamlı olarak destekler. - gregsdennis


Eğer kullanıyorsanız Jackson JSON ayrıştırıcınız olarak, bu, yorumlara izin vermek için bunu nasıl etkinleştirirsiniz?

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

Öyleyse bunun gibi yorumlarınız olabilir:

{
  key: "value" // comment
}

Ve ile başlayan yorumlarınız da olabilir # ayarlayarak:

mapper.configure(Feature.ALLOW_YAML_COMMENTS, true);    

Ama genel olarak (daha önce cevaplandırıldığı gibi), şartname yorumlara izin vermez.


51
2018-02-06 20:44



Denediğimde bu bağlantıyı zaman aşımına uğradım: The connection to the server was reset while the page was loading. - Peter Mortensen


Yorumlar resmi bir standart değildir. Bazı ayrıştırıcılar C stili yorumları desteklese de. Kullandığım biri JsonCpp. Örneklerde şu 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 özel bir uzantıdır ve standart değildir.

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

JSON'a alternatif TOML.


49
2017-10-26 09:46



Groovy biraz var JSON ile çalışmak için yerleşik sınıflar. JsonSlurper yorum yapabilir. Elbette, resmi özelliklerde yorumlara izin verilmez, bu nedenle herhangi bir ayrıştırıcıda bu davranış standart dışı ve taşınabilir değildir. - izrik