JSON Naming Convention [chiuso]


379

Esiste uno standard per la denominazione JSON? Vedo la maggior parte degli esempi usando tutti i caratteri minuscoli separati da trattino basso (minuscolo). Ma puoi usare PascalCase o CamelCase?


12
Ero curioso di sapere cosa scegliessero alcuni leader del settore. Le API di Twitter e Facebook usano snake_case mentre Microsoft e Google usano camelCase.
Giustino,

2
@Justin perché Twitter sta usando Ruby e Facebook sta usando PHP. Ruby e PHP sono in snake_case. Microsoft e Google stanno usando bene C / .NET e Java rispettivamente. Oh, è vero. Net e Java sono forse in camelCase. Riguarda le convenzioni dei linguaggi di programmazione
Abel Callejo,

1
Non esiste uno standard, ma la convenzione sembra essere quella di utilizzare lo standard della tecnologia del sistema di ricezione.
Martin of Hessle

1
Tutti sono corretti, non esiste una convenzione rigorosa per nomi / chiavi in ​​JSON. Tuttavia, consiglio vivamente di evitare il caso kebab in quanto non è possibile accedervi con la notazione punto (.) In javascript e deve essere accessibile usando la notazione array [] che ritengo noiosa.
Saurabh,

2
Chiuso principalmente come opinione? Il PO chiedeva fatti riguardanti le capacità / limitazioni del formato, non per l'opinione di nessuno. Ha detto "puoi", non "dovresti". Forse il PO non l'ha detto abbastanza chiaramente per quei cinque individui, ma dovresti avere una comprensione della lettura piuttosto scarsa per non capire quello che chiede.
dynamichael,

Risposte:


251

Non esiste uno standard SINGOLO, ma ho visto 3 stili che menzioni ("Pascal / Microsoft", "Java" ( camelCase) e "C" (caratteri di sottolineatura, snake_case)) - oltre ad almeno un altro, kebab-casecome longer-name).

Sembra principalmente dipendere da ciò che avevano gli sviluppatori in background del servizio in questione; quelli con background c / c ++ (o lingue che adottano nomi simili, che includono molti linguaggi di scripting, ruby ​​ecc.) spesso scelgono la variante di sottolineatura; e riposare allo stesso modo (Java vs .NET). La libreria Jackson menzionata, ad esempio, assume la convenzione di denominazione dei bean Java ( camelCase)

AGGIORNAMENTO: la mia definizione di "standard" è una convenzione SINGOLA. Quindi, mentre si potrebbe affermare "sì, ci sono molti standard", per me ce ne sono molti Naming Conventions, nessuno dei quali è "lo" standard in generale. Uno di questi potrebbe essere considerato lo standard per una piattaforma specifica, ma dato che JSON viene utilizzato per l'interoperabilità tra piattaforme che possono o non hanno molto senso.


4
Attenersi allo sfondo degli sviluppatori è importante, ma JSON si attacca allo standard Javascript. La tua prima affermazione non è del tutto corretta. Ma sicuramente attenersi alle convenzioni di denominazione della tua squadra.
Anubian Noob,

8
Sarebbe interessante vedere alcune statistiche, dato che c'è un attrito costante tra le persone che sostengono la connessione tra JSON e Javascript (al di là del solo patrimonio storico) e quelle che pensano che al momento ci sia poco che collega JSON a Javascript. Appartengo a quest'ultimo campo. Ma sarei interessato a conoscere i modelli di utilizzo relativi.
StaxMan,

@StaxMan C # usa PascalCase nella maggior parte dei casi, non camelCase.
ArtOfCode

@ArtOfCode sì. Qual è il tuo punto? (inoltre, il caso pascal talvolta chiamato "caso del cammello superiore")
StaxMan

@StaxMan valuteresti di aggiornare la tua risposta per includere la menzione della Guida allo stile di Google
garrettmac,

402

In questo documento Google JSON Style Guide (consigli per la creazione di API JSON su Google),

Si raccomanda che:

  1. I nomi delle proprietà devono essere camelCased , stringhe ASCII.

  2. Il primo carattere deve essere una lettera, un carattere di sottolineatura (_) o un segno di dollaro ($).

Esempio:

{
  "thisPropertyIsAnIdentifier": "identifier value"
}

La mia squadra segue questa convenzione.


8
Apparentemente Google ha cambiato le linee guida, niente da trovare sul caso del cammello o iniziando con la lettera, _ o $ nel documento più ...
TheEye

32
@TheEye È ancora lì, devi solo fare clic sul menu a discesa.
gdw2,

5
Buon occhio, @ gdw2. Per altre persone in futuro, è se si fa clic sul pulsante freccia accanto Property Name Guidelines->Property Name Format->Choose meaningful property names..
Panzercrisis,

3
Qualcuno può spiegare perché e quando utilizzare un carattere di sottolineatura per aggiungere il prefisso al nome di una proprietà? Un riferimento sarebbe utile, non solo un'opinione.
Sean Glover,

4
citando Google non è una risposta propper. supportano solo una certa convenzione / linea guida e sembra avere senso Java in quanto sono piuttosto orientati a Java.
Thomas Andreè Wang,

186

Premessa

Non esiste un nome standard per le chiavi in ​​JSON . Secondo la sezione Oggetti delle specifiche:

La sintassi JSON non impone alcuna restrizione alle stringhe utilizzate come nomi, ...

Il che significa che camelCase o snake_case dovrebbero funzionare bene.

Fattori guida

L'imposizione di una convenzione di denominazione JSON è molto confusa. Tuttavia, questo può essere facilmente capito se lo si scompone in componenti.

  1. Linguaggio di programmazione per la generazione di JSON

    • Python - snake_case
    • PHP - snake_case
    • Java - camelCase
    • JavaScript - camelCase
  2. JSON stesso non ha un nome standard di chiavi

  3. Linguaggio di programmazione per l'analisi di JSON

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

Abbina i componenti

  1. Python »JSON» Python - snake_case - unanime
  2. Python »JSON» PHP - snake_case - unanime
  3. Python »JSON» Java - snake_case - vedi sotto il problema Java
  4. Python »JSON» JavaScript - snake_case avrà senso; avvitare comunque il front-end
  5. Python »JSON» non lo sai - snake_case avrà senso; avvitare comunque il parser
  6. PHP »JSON» Python - snake_case - unanime
  7. PHP »JSON» PHP - snake_case - unanime
  8. PHP »JSON» Java - snake_case - vedi sotto il problema Java
  9. PHP »JSON» JavaScript - snake_case avrà senso; avvitare comunque il front-end
  10. PHP »JSON» non lo sai - snake_case avrà senso; avvitare comunque il parser
  11. Java »JSON» Python - snake_case - vedi sotto il problema Java
  12. Java »JSON» PHP - snake_case - vedi sotto il problema Java
  13. Java »JSON» Java - camelCase - unanime
  14. Java »JSON» JavaScript - camelCase - unanime
  15. Java »JSON» non lo sai - camelCase avrà un senso; avvitare comunque il parser
  16. JavaScript »JSON» Python - snake_case avrà senso; avvitare comunque il front-end
  17. JavaScript »JSON» PHP - snake_case avrà senso; avvitare comunque il front-end
  18. JavaScript »JSON» Java - camelCase - unanime
  19. JavaScript »JSON» JavaScript - camelCase - Originale

Problema Java

snake_case avrà ancora senso per quelli con voci Java perché le librerie JSON esistenti per Java stanno usando solo metodi per accedere alle chiavi invece di usare il dot.syntax standard . Ciò significa che Java non farebbe molto male l'accesso alle chiavi snake_cased rispetto all'altro linguaggio di programmazione che può eseguire dot.syntax .

Esempio per il pacchetto Javaorg.json

JsonObject.getString("snake_cased_key")

Esempio per il pacchetto Javacom.google.gson

JsonElement.getAsString("snake_cased_key")

Alcune implementazioni effettive

conclusioni

La scelta della giusta convenzione di denominazione JSON per l'implementazione JSON dipende dallo stack tecnologico. Ci sono casi in cui è possibile usare snake_case , camelCase o qualsiasi altra convenzione di denominazione.

Un'altra cosa da considerare è il peso da mettere sul generatore JSON rispetto al parser JSON e / o al JavaScript front-end. In generale, si dovrebbe mettere più peso sul lato del generatore JSON piuttosto che sul lato del parser JSON. Questo perché la logica aziendale di solito risiede sul lato del generatore JSON.

Inoltre, se il lato JSON-parser è sconosciuto, puoi dichiarare ciò che mai può funzionare per te.


2
"Person":non è camelCase :)
stoft

1
@stoft probabilmente perché hanno seguito anche la convenzione di schema.org. Avviare la chiave con una lettera maiuscola significa che si tratta di un'entità di vocabolario. L'avvio della chiave con una lettera minuscola significa che è una proprietà del vocabolario.
Abel Callejo

2
Non sono d'accordo con queste idee, semplicemente perché il backend Python> Java frontend dovrebbe essere camelCase, ma poi aggiungi frontend Python e hai compromesso backend e un frontend. Dovrebbe essere come backend lo ha "standard". I parser frontend hanno comunque più facile adattarsi
Bojan Kogoj

2
La mia preoccupazione qui è che ci sia riferimento allo stack "la tua tecnologia". Un produttore di JSON, in particolare se servito da un server HTTP, non dovrebbe sapere chi o cosa lo sta consumando o per quali motivi. Se JSON viene utilizzato come metodo di comunicazione tra molti produttori e consumatori, lo stack tecnologico del produttore non dovrebbe essere considerato.
Robbie Wareham,

1
@RobbieWareham Sono in qualche modo d'accordo su questo. La cosa qui è che "per standard" non esiste una convenzione ufficiale di denominazione. Quindi, con ciò, forse si dovrebbe optare per "di fatto", che è guardare allo stack tecnologico. Penso che guardare nello stack tecnologico sia il modo migliore per andare. Dai un'occhiata a Facebook, hanno onorato storicamente JavaScript e hanno usato snakeCase? Nah! Hanno scelto di restare con la snake_case di PHP.
Abel Callejo

18

In particolare per me su NodeJS, se sto lavorando con database e i miei nomi dei campi sono separati da sottolineatura, li uso anche nelle chiavi struct.

Questo perché i campi db hanno molti acronimi / abbreviazioni, quindi qualcosa come appSNSInterfaceRRTest sembra un po 'disordinato ma app_sns_interface_rr_test è più bello.

In Javascript le variabili sono tutte camelCase e i nomi delle classi (costruttori) sono ProperCase, quindi vedresti qualcosa di simile

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

o

generalLedgerTask = new GeneralLedgerTask( devTask );

E ovviamente nelle chiavi / stringhe JSON sono racchiuse tra virgolette doppie, ma poi basta usare JSON.stringify e passare oggetti JS, quindi non devi preoccuparti di questo.

Ho lottato un po 'con questo fino a quando ho trovato questo mezzo felice tra le convenzioni di denominazione JSON e JS.


1
anch'io. Ricevere JSON con snake_case sul client Android sembra imbarazzante !! Inoltre, il database non differenzia il case per i nomi delle colonne, quindi snake_case sembra essere il migliore per il database.
miticalcoder

@mythicalcoder JSON in Java non è intrinseco nel suo nucleo. Java utilizza solo pacchetti esterni per l'analisi di Java org.json, ad es gson. Ricevere i dati di snake_case non fa così male ...JSONObject.get('snake_case_key_here')
Abel Callejo

9

Sembra che ci sia abbastanza variazione che le persone fanno di tutto per consentire la conversione da tutte le convenzioni ad altre: http://www.cowtowncoder.com/blog/archives/cat_json.html

In particolare, preferisce il menzionato parser Jackson JSON bean_naming.


5
Correzione minore: Jackson imposta automaticamente la convenzione di denominazione del bean Java, che è (inferiore) Camel Case, come beanNaming.
StaxMan


0

Come altri hanno affermato, non esiste uno standard, quindi dovresti sceglierne uno tu stesso. Ecco un paio di cose da considerare quando lo fai:

  1. Se si utilizza JavaScript per utilizzare JSON, l'utilizzo della stessa convenzione di denominazione per le proprietà in entrambi fornirà coerenza visiva e, eventualmente, alcune opportunità per un riutilizzo del codice più pulito.

  2. Un piccolo motivo per evitare il caso di kebab è che i trattini possono scontrarsi visivamente con -caratteri che compaiono in valori.

    {
      "bank-balance": -10
    }

1
snake_case usa i trattini bassi, non i trattini.
percebus,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.