JSON Adlandırma Sözleşmesi [kapalı]


379

JSON adlandırmada bir standart var mı? Alt çizgi ile ayrılmış tüm küçük harf kullanarak çoğu örnek görüyorum (küçük_kutu). Ancak, PascalCase veya camelCase kullanabilir misiniz?


12
Bazı endüstri liderlerinin ne seçtiğini merak ettim. Twitter ve Facebook API'leri snake_case, Microsoft ve Google ise camelCase kullanıyor.
Justin

2
@Justin, Twitter Ruby kullanıyor ve Facebook PHP kullanıyor. Ruby ve PHP snake_case'de. Microsoft ve Google sırasıyla C / .NET ve Java kullanıyor. Oh doğru .Net ve Java belki de camelCase içine. Her şey programlama dillerinin sözleşmeleri ile ilgili
Abel Callejo

1
Bir standart yoktur, ancak sözleşme, alıcı sistem teknolojisinin standardını kullanmak gibi görünmektedir.
Martin of Hessle

1
Hepsi doğrudur JSON'da adlar / anahtarlar için katı bir kural yoktur. Yine de, ben javascript dot (.) Notasyonu ile erişilemez ve sıkıcı olduğunu düşünüyorum dizi [] notasyonu kullanılarak erişilmesi gerektiği için kebap durumda önlemek için tavsiye ederim.
saurabh

2
Öncelikle fikir tabanlı mı? OP, kimsenin görüşü için değil, formatın yetenekleri / sınırlamaları ile ilgili gerçekleri soruyordu. "Yapabilirsin" dedi, "yapamazsın" değil. Belki de OP bu beş kişi için yeterince açık bir şekilde söz etmedi, ancak ne istediğini anlamamak için oldukça zayıf bir okuma anlayışına sahip olmanız gerekir.
dynamichael

Yanıtlar:


251

Hiçbir TEK standarttır, ama ( "Pascal / Microsoft", "Java" (söz 3 stilleri gördük camelCase) ve "C" (alt çizgi, snake_caseaynı zamanda en az birini daha, -)) kebab-casegibilonger-name ).

Çoğunlukla söz konusu hizmetin arka plan geliştiricilerinin sahip oldukları şeye bağlı olduğu görülüyor; c / c ++ arka planı olanlar (veya birçok komut dosyası dili, yakut vb. içeren benzer adlandırma kullanan diller) genellikle alt çizgi varyantını seçer; ve benzer şekilde dinlenin (Java vs .NET). Sözü edilen Jackson kütüphanesi, Java fasulyesi adlandırma kuralını (camelCase )

GÜNCELLEME: Benim "standart" tanımım TEK bir kuraldır. Bu yüzden "evet, birçok standart var" iddiasında bulunabilse de, bana göre Naming Conventions, hepsi "Standart" standart değil. Bunlardan biri, belirli bir platform için standart olarak kabul edilebilir, ancak JSON'un, çok anlamlı olabilecek veya olmayabilecek platformlar arasında birlikte çalışabilirlik için kullanıldığı göz önüne alındığında.


4
Geliştiricilerin arka planına sadık kalmak önemlidir, ancak JSON Javascript standardıyla uyumludur. İlk ifadeniz doğru değil. Ancak ekibinizin adlandırma kurallarına kesinlikle sadık kalın.
Anubian Noob

8
JSON ve Javascript (sadece tarihsel mirasın ötesinde) arasında bağlantı olduğunu iddia eden kişiler ile şu anda JSON'u Javascript'e bağlayan çok az şey olduğunu düşünenler arasında sürekli bir sürtünme olduğu için bazı istatistikler görmek ilginç olurdu. Ben ikinci kampa aitim. Ancak göreceli kullanım kalıplarını bilmek isterim.
StaxMan

@StaxMan C #, camelCase yerine çoğu durumda PascalCase kullanır.
ArtOfCode

@ArtOfCode evet. Amacın ne? (ayrıca, pascal kasası bazen "üst deve kasası" olarak da adlandırılır)
StaxMan

@StaxMan, Googles Stil Kılavuzu
garrettmac

402

Bu dokümanda Google JSON Stil Kılavuzu (Google'da JSON API'leri oluşturmaya yönelik öneriler),

Şunları önerir:

  1. Özellik adları camelCased , ASCII dizeleri olmalıdır.

  2. İlk karakter bir harf, alt çizgi (_) veya dolar işareti ($) olmalıdır.

Misal:

{
  "thisPropertyIsAnIdentifier": "identifier value"
}

Ekibim bu sözleşmeyi takip ediyor.


8
Görünüşe göre Google yönergeleri değiştirdi, deve davasıyla ilgili hiçbir şey bulamadı veya belgedeki mektup, _ veya $ ile başlıyor ...
TheEye

32
@TheEye Hala orada, sadece açılır menüyü tıklamanız gerekiyor.
gdw2

5
İyi göz, @ gdw2. Gelecekte diğer insanlar için, ok düğmesini tıklarsanız Property Name Guidelines->Property Name Format->Choose meaningful property names..
Panzercrisis

3
Birisi bir mülk adını önek olarak alt çizgiyi neden ve ne zaman kullanacağınızı açıklayabilir mi? Bir referans sadece bir fikir değil, faydalı olacaktır.
Sean Glover

4
Google’a atıf yapmak, doğru bir yanıt değildir. sadece belirli bir konvansiyonu / kılavuzu destekliyorlar ve oldukça java odaklı oldukları için java mantıklı görünüyor.
Thomas Andreè Wang

186

Öncül

Orada JSON anahtarlardan hiçbir standart adlandırma . Spesifikasyonun Nesneler bölümüne göre :

JSON sözdizimi, ad olarak kullanılan dizelere herhangi bir kısıtlama getirmez, ...

Bu da demek camelCase veya snake_case cezası çalışmalıdır.

Sürüş faktörleri

JSON adlandırma kuralını uygulamak çok kafa karıştırıcıdır. Ancak, bileşenlere ayırırsanız bu kolayca çözülebilir.

  1. JSON oluşturmak için programlama dili

    • Python - snake_case
    • PHP - snake_case
    • Java - camelCase
    • JavaScript - camelCase
  2. JSON'un kendisinde standart anahtar adı yoktur

  3. JSON ayrıştırma için programlama dili

    • Python - snake_case
    • PHP - snake_case
    • Java - camelCase
    • JavaScript - camelCase

Bileşenleri karıştırın

  1. Python »JSON» Python - snake_case - oybirliği ile
  2. Python »JSON» PHP - snake_case - oybirliği ile
  3. Python »JSON» Java - snake_case - lütfen aşağıdaki Java sorununa bakın
  4. Python »JSON» JavaScript - snake_case anlamlı olacak; ön ucu yine de vidala
  5. Python »JSON» bilmiyorsunuz - snake_case mantıklı olacak; ayrıştırıcıyı yine de vidala
  6. PHP »JSON» Python - snake_case - oybirliği ile
  7. PHP »JSON» PHP - snake_case - oybirliği ile
  8. PHP »JSON» Java - snake_case - lütfen aşağıdaki Java sorununa bakın
  9. PHP »JSON» JavaScript - snake_case anlamlı olacak; ön ucu yine de vidala
  10. PHP »JSON» bilmiyorsunuz - snake_case mantıklı olacak; ayrıştırıcıyı yine de vidala
  11. Java »JSON» Python - snake_case - lütfen aşağıdaki Java sorununa bakın
  12. Java »JSON» PHP - snake_case - lütfen aşağıdaki Java sorununa bakın
  13. Java »JSON» Java - camelCase - oybirliği ile
  14. Java »JSON» JavaScript - camelCase takdim edilenler - oybirliği ile
  15. Java »JSON» bilmiyorsunuz - camelCase anlamlı olacak; ayrıştırıcıyı yine de vidala
  16. JavaScript »JSON» Python - snake_case anlam ifade edecektir; ön ucu yine de vidala
  17. JavaScript »JSON» PHP - snake_case anlamlı olacak; ön ucu yine de vidala
  18. JavaScript »JSON» Java - camelCase - oybirliği ile
  19. JavaScript »JSON» JavaScript - camelCase - Orijinal

Java sorunu

Java için mevcut JSON kitaplıkları standart dot.syntax kullanmak yerine yalnızca anahtarlara erişmek için yöntemler kullandığından snake_case , Java girişleri olanlar için yine de anlamlı olacaktır . Bu, Java'nın snake_cased'a erişmesinin o kadar çok incitmeyeceği anlamına gelir yapabileceğiniz diğer programlama dili ile karşılaştırıldığında anahtarlarını dot.syntax .

Java paketi örneğiorg.json

JsonObject.getString("snake_cased_key")

Java paketi örneğicom.google.gson

JsonElement.getAsString("snake_cased_key")

Bazı gerçek uygulamalar

Sonuçlar

JSON uygulamanız için doğru JSON adlandırma kuralını seçmek, teknoloji yığınınıza bağlıdır. Birini kullanabilirsiniz durumlar vardır snake_case , camelCase , ya da başka bir adlandırma kuralı.

Dikkate alınması gereken başka bir şey, JSON-üretecine karşı JSON-ayrıştırıcı ve / veya ön uç JavaScript'e uygulanacak ağırlıktır. Genel olarak, JSON ayrıştırıcı tarafı yerine JSON üreteci tarafına daha fazla ağırlık konulmalıdır. Bunun nedeni, iş mantığının genellikle JSON-jeneratör tarafında bulunmasıdır.

Ayrıca, JSON ayrıştırıcı tarafı bilinmiyorsa, sizin için neyin işe yarayabileceğini beyan edebilirsiniz.


2
"Person":değil
camelCase

1
@stoft muhtemelen schema.org konvansiyonunu da takip ettikleri için. Anahtarın büyük bir harfle başlatılması, bunun bir kelime varlığı olduğu anlamına gelir. Anahtarın küçük harfle başlatılması, bir kelime özelliği olduğu anlamına gelir.
Abel Callejo

2
Bu fikirlere katılmıyorum, çünkü Python arka ucu> Java ön ucu camelCase olmalı, ancak daha sonra Python ön ucunu eklediniz ve arka uç ve bir ön uçtan ödün verdiniz. Arka uç "standart" ile böyle olmalıdır. Ön uç ayrıştırıcılar yine de uyum sağlamak daha kolay
Bojan Kogoj

2
Buradaki kaygım, "teknolojiniz" yığınına referans olması. JSON üreticisi, özellikle bir HTTP sunucusu tarafından sunuluyorsa, onu kimin veya neyin tükettiği veya hangi sebeplerle bildiği konusunda bilgi sahibi olmamalıdır. JSON, birçok üretici ve tüketici arasında bir iletişim yöntemi olarak kullanılıyorsa, üreticinin teknoloji yığını dikkate alınmamalıdır.
Robbie Wareham

1
@RobbieWareham Bir şekilde buna katılıyorum. Burada "standartlara göre" resmi bir adlandırma kuralı yoktur. Yani, belki de teknoloji yığınına bakmak için "fiili tarafından" tercih etmeliyiz. Bence teknoloji yığınına bakmanın en iyi yolu bu. Facebook'a bir göz atın, geçmişte JavaScript'i onurlandırdılar ve snakeCase kullandılar mı? Hayır! PHP'nin snake_case'i ile kalmayı seçtiler.
Abel Callejo

18

Özellikle NodeJS'de benim için, veritabanları ile çalışıyorsam ve alan adlarımın alt çizgileri ayrılmışsa, bunları yapı anahtarlarında da kullanırım.

Bunun nedeni, db alanlarının çok sayıda kısaltma / kısaltmaya sahip olmasıdır, bu nedenle appSNSInterfaceRRTest gibi bir şey biraz dağınık görünüyor, ancak app_sns_interface_rr_test daha güzel görünüyor .

Javascript değişkenleri tüm camelCase ve sınıf isimleri (yapıcılar) ProperCase, bu yüzden şöyle bir şey görürsünüz

var devTask = {
        task_id: 120,
        store_id: 2118,
        task_name: 'generalLedger'
    };

veya

generalLedgerTask = new GeneralLedgerTask( devTask );

Ve elbette JSON anahtarları / dizeleri çift tırnaklarla sarılır, ancak daha sonra JSON.stringify kullanın ve JS nesnelerini iletin, bu yüzden endişelenmenize gerek yok.

JSON ve JS adlandırma kuralları arasında bu mutlu ortamı bulana kadar bununla biraz uğraştım.


1
burada aynı. Android istemcisinde snake_case ile JSON almak garip görünüyor !! Ayrıca veritabanı sütun adları için büyük / küçük harf ayrımını farklılaştırmaz, bu nedenle snake_case veritabanı için en iyi gibi görünür.
efsanevi

@mythicalcoder Java'daki JSON, çekirdeğinde gerçek değildir. Java yalnızca ayrıştırmak için harici paketleri kullanır org.json, örn gson. Snake_case verilerini almak o kadar acıtmaz ...JSONObject.get('snake_case_key_here')
Abel Callejo

9

İnsanların tüm sözleşmelerden diğerlerine dönüşüm sağlamak için kendi yollarından gitmeleri için yeterli varyasyon var gibi görünüyor: http://www.cowtowncoder.com/blog/archives/cat_json.html

Özellikle, bahsedilen Jackson JSON ayrıştırıcısı tercih eder bean_naming.


5
Küçük düzeltme: Jackson, varsayılan olarak (daha düşük) Deve Kılıfı gibi Java fasulyesi adlandırma kuralını kullanır beanNaming.
StaxMan


0

Diğerlerinin de belirttiği gibi standart yok, bu yüzden kendiniz bir tane seçmelisiniz. İşte bunu yaparken göz önünde bulundurmanız gereken birkaç nokta:

  1. JSON'u tüketmek için JavaScript kullanıyorsanız, her ikisinde de özellikler için aynı adlandırma kuralını kullanmak görsel tutarlılık ve muhtemelen daha temiz kodun yeniden kullanımı için bazı fırsatlar sağlayacaktır.

  2. Kebaptan kaçınmanın küçük bir nedeni, tire işaretlerinin -değerlerde görünen karakterlerle görsel olarak çakışabilmesidir .

    {
      "bank-balance": -10
    }

1
snake_case tire işareti değil alt çizgi kullanır.
percebus
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.