JSON Naming Convention [geschlossen]


379

Gibt es einen Standard für die JSON-Benennung? Ich sehe die meisten Beispiele, bei denen alle Kleinbuchstaben durch Unterstriche (Kleinbuchstaben) getrennt sind. Aber können Sie PascalCase oder camelCase verwenden?


12
Ich war neugierig, was einige Branchenführer gewählt haben. Twitter- und Facebook-APIs verwenden snake_case, während Microsoft und Google camelCase verwenden.
Justin

2
@ Justin, das liegt daran, dass Twitter Ruby und Facebook PHP verwendet. Ruby und PHP sind in snake_case. Microsoft und Google verwenden C / .NET bzw. Java gut. Oh, das stimmt. Net und Java stehen vielleicht auf camelCase. Es
Abel Callejo

1
Es gibt keinen Standard, aber die Konvention scheint darin zu bestehen, den Standard der Technologie des Empfangssystems zu verwenden.
Martin von Hessle

1
Alle sind korrekt, es gibt keine strenge Konvention für Namen / Schlüssel in JSON. Ich empfehle jedoch dringend, Kebab-Groß- und Kleinschreibung zu vermeiden, da auf diesen nicht über die Punktnotation (.) In Javascript zugegriffen werden kann und mit der Array [] -Notation zugegriffen werden muss, was ich für mühsam halte.
Saurabh

2
Geschlossen als primär meinungsbasiert? Das OP fragte nach Fakten bezüglich der Fähigkeiten / Einschränkungen des Formats, nicht nach jedermanns Meinung. Er sagte "kannst du", nicht "solltest du". Vielleicht hat das OP es für diese fünf Personen nicht klar genug formuliert, aber Sie müssten ein ziemlich schlechtes Leseverständnis haben, um nicht zu verstehen, was er verlangt.
Dynamichael

Antworten:


251

Es gibt keinen EINZELNEN Standard, aber ich habe 3 Stile gesehen, die Sie erwähnen ("Pascal / Microsoft", "Java" ( camelCase) und "C" (Unterstriche snake_case)) - sowie mindestens einen weiteren, kebab-casewie longer-name).

Es scheint hauptsächlich davon abzuhängen, welchen Hintergrund die Entwickler des betreffenden Dienstes hatten. Personen mit c / c ++ - Hintergrund (oder Sprachen mit ähnlichen Namen, einschließlich vieler Skriptsprachen, Ruby usw.) wählen häufig eine Unterstrichvariante. und ruhen Sie sich ähnlich aus (Java vs .NET). Die erwähnte Jackson-Bibliothek geht beispielsweise von einer Java-Bean-Namenskonvention aus ( camelCase)

UPDATE: Meine Definition von "Standard" ist eine EINZIGE Konvention. Während man also behaupten könnte "Ja, es gibt viele Standards", gibt es für mich mehrere Naming Conventions, von denen keiner insgesamt "Der" Standard ist. Eine davon könnte als Standard für eine bestimmte Plattform angesehen werden, da JSON jedoch für die Interoperabilität zwischen Plattformen verwendet wird, die möglicherweise wenig sinnvoll sind oder nicht.


4
Es ist wichtig, sich an den Hintergrund der Entwickler zu halten, aber JSON hält sich an den Javascript-Standard. Ihre erste Aussage ist nicht ganz richtig. Halten Sie sich aber auf jeden Fall an die Namenskonventionen Ihres Teams.
Anubian Noob

8
Es wäre interessant, einige Statistiken zu sehen, da es ständige Reibungen zwischen Menschen gibt, die eine Verbindung zwischen JSON und Javascript (über das historische Erbe hinaus) behaupten, und denen, die glauben, dass es derzeit wenig gibt, das JSON mit Javascript verbindet. Ich gehöre zum letzteren Lager. Aber ich wäre daran interessiert, relative Nutzungsmuster zu kennen.
StaxMan

@StaxMan C # verwendet in den meisten Fällen PascalCase, nicht camelCase.
ArtOfCode

@ArtOfCode ja. Worum geht es dir? (auch Pascal-Fall manchmal "oberes Kamel-Fall" genannt)
StaxMan

@StaxMan würden Sie erwägen, Ihre Antwort zu aktualisieren, um Erwähnung des Googles Style Guide
Garrettmac

402

In diesem Dokument Google JSON Style Guide (Empfehlungen zum Erstellen von JSON-APIs bei Google)

Es wird empfohlen, dass:

  1. Eigenschaftsnamen müssen camelCased , ASCII-Zeichenfolgen sein.

  2. Das erste Zeichen muss ein Buchstabe, ein Unterstrich (_) oder ein Dollarzeichen ($) sein.

Beispiel:

{
  "thisPropertyIsAnIdentifier": "identifier value"
}

Mein Team folgt dieser Konvention.


8
Anscheinend hat Google die Richtlinien geändert, nichts mehr über
Kamelfälle

32
@TheEye Es ist immer noch da, Sie müssen nur auf die Dropdown-Liste klicken.
GDW2

5
Gutes Auge, @ gdw2. Für andere Leute in der Zukunft ist es, wenn Sie auf die Pfeilschaltfläche von klicken Property Name Guidelines->Property Name Format->Choose meaningful property names..
Panzercrisis

3
Kann jemand erklären, warum und wann Sie einen Unterstrich verwenden würden, um einem Eigenschaftsnamen ein Präfix voranzustellen? Eine Referenz wäre nützlich, nicht nur eine Meinung.
Sean Glover

4
Das Zitieren von Google ist keine richtige Antwort. Sie unterstützen nur eine bestimmte Konvention / Richtlinie und es scheint, dass Java Sinn macht, da sie ziemlich Java-orientiert sind.
Thomas Andreè Wang

186

Prämisse

In JSON gibt es keine Standardbenennung von Schlüsseln . Gemäß dem Abschnitt Objekte der Spezifikation:

Die JSON-Syntax legt keine Einschränkungen für die als Namen verwendeten Zeichenfolgen fest, ...

Was bedeutet, dass camelCase oder snake_case gut funktionieren sollten.

Antriebsfaktoren

Das Auferlegen einer JSON-Namenskonvention ist sehr verwirrend. Dies kann jedoch leicht herausgefunden werden, wenn Sie es in Komponenten zerlegen.

  1. Programmiersprache zum Generieren von JSON

    • Python - snake_case
    • PHP - snake_case
    • Java - camelCase
    • JavaScript - camelCase
  2. JSON selbst hat keine Standardbenennung von Schlüsseln

  3. Programmiersprache zum Parsen von JSON

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

Mischen Sie die Komponenten

  1. Python »JSON» Python - snake_case - einstimmig
  2. Python »JSON» PHP - snake_case - einstimmig
  3. Python »JSON» Java - snake_case - siehe das Java-Problem unten
  4. Python »JSON» JavaScript - snake_case macht Sinn; Schrauben Sie das Frontend trotzdem fest
  5. Python »JSON», das Sie nicht kennen - snake_case macht Sinn; Schrauben Sie den Parser trotzdem
  6. PHP »JSON» Python - snake_case - einstimmig
  7. PHP »JSON» PHP - snake_case - einstimmig
  8. PHP »JSON» Java - snake_case - siehe das Java-Problem unten
  9. PHP »JSON» JavaScript - snake_case macht Sinn; Schrauben Sie das Frontend trotzdem fest
  10. PHP »JSON», das Sie nicht kennen - snake_case macht Sinn; Schrauben Sie den Parser trotzdem
  11. Java »JSON» Python - snake_case - siehe das Java-Problem unten
  12. Java »JSON» PHP - snake_case - siehe das Java-Problem unten
  13. Java »JSON» Java - camelCase - einstimmig
  14. Java »JSON» JavaScript - camelCase - einstimmig
  15. Java »JSON», das Sie nicht kennen - camelCase macht Sinn; Schrauben Sie den Parser trotzdem
  16. JavaScript »JSON» Python - snake_case macht Sinn; Schrauben Sie das Frontend trotzdem fest
  17. JavaScript »JSON» PHP - snake_case macht Sinn; Schrauben Sie das Frontend trotzdem fest
  18. JavaScript »JSON» Java - camelCase - einstimmig
  19. JavaScript »JSON» JavaScript - camelCase - Original

Java-Problem

snake_case ist für Benutzer mit Java-Einträgen weiterhin sinnvoll, da die vorhandenen JSON-Bibliotheken für Java nur Methoden für den Zugriff auf die Schlüssel verwenden, anstatt die Standard- dot.syntax zu verwenden . Dies bedeutet, dass es Java nicht so sehr schaden würde, auf die snake_cased- Schlüssel zuzugreifen , im Vergleich zu der anderen Programmiersprache, die die dot.syntax ausführen kann .

Beispiel für das Java- org.json Paket

JsonObject.getString("snake_cased_key")

Beispiel für das Java- com.google.gson Paket

JsonElement.getAsString("snake_cased_key")

Einige tatsächliche Implementierungen

Schlussfolgerungen

Die Auswahl der richtigen JSON-Namenskonvention für Ihre JSON-Implementierung hängt von Ihrem Technologie-Stack ab. Es gibt Fälle, in denen man snake_case , camelCase oder eine andere Namenskonvention verwenden kann.

Eine andere zu berücksichtigende Sache ist die Gewichtung des JSON-Generators gegenüber dem JSON-Parser und / oder dem Front-End-JavaScript. Im Allgemeinen sollte mehr Gewicht auf die Seite des JSON-Generators als auf die Seite des JSON-Parsers gelegt werden. Dies liegt daran, dass sich die Geschäftslogik normalerweise auf der Seite des JSON-Generators befindet.

Wenn die JSON-Parser-Seite unbekannt ist, können Sie auch deklarieren, was für Sie jemals funktionieren kann.


2
"Person":ist nicht camelCase :)
Stoft

1
@stoft Das liegt wahrscheinlich daran, dass sie auch der Konvention von schema.org gefolgt sind. Wenn Sie den Schlüssel mit einem Großbuchstaben beginnen, handelt es sich um eine Vokabeleinheit. Das Starten des Schlüssels mit Kleinbuchstaben bedeutet, dass dies eine Vokabeleigenschaft ist.
Abel Callejo

2
Ich bin mit diesen Ideen nicht einverstanden, einfach weil Python-Backend> Java-Frontend camelCase sein sollte, aber dann fügen Sie Python-Frontend hinzu und haben das Backend und ein Frontend kompromittiert. Es sollte sein, wie Backend es von "Standard" hat. Frontend-Parser haben es sowieso einfacher, sich anzupassen
Bojan Kogoj

2
Ich mache mir hier Sorgen, dass es einen Verweis auf "Ihre Technologie" gibt. Ein Hersteller von JSON, insbesondere wenn er von einem HTTP-Server bedient werden soll, sollte nicht wissen, wer oder was es verbraucht oder aus welchen Gründen. Wenn JSON als Kommunikationsmethode zwischen vielen Herstellern und Verbrauchern verwendet wird, sollte der Technologie-Stack des Herstellers keine Rolle spielen.
Robbie Wareham

1
@RobbieWareham Da stimme ich irgendwie zu. Die Sache hier ist, dass es "nach Maßstäben" keine offizielle Namenskonvention gibt. Vielleicht sollte man sich also für "de facto" entscheiden, um den Technologie-Stack zu betrachten. Ich denke, ein Blick in den Technologie-Stack ist der beste Weg. Werfen Sie einen Blick auf Facebook, haben sie in der Vergangenheit JavaScript gewürdigt und snakeCase verwendet? Nein! Sie entschieden sich, bei PHPs snake_case zu bleiben.
Abel Callejo

18

Insbesondere für mich auf NodeJS, wenn ich mit Datenbanken arbeite und meine Feldnamen durch Unterstriche getrennt sind, verwende ich sie auch in den Strukturschlüsseln.

Dies liegt daran, dass DB-Felder viele Akronyme / Abkürzungen haben, so dass so etwas wie appSNSInterfaceRRTest etwas chaotisch aussieht, aber app_sns_interface_rr_test schöner ist.

In Javascript sind Variablen alle camelCase und Klassennamen (Konstruktoren) ProperCase, so dass Sie so etwas sehen würden

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

oder

generalLedgerTask = new GeneralLedgerTask( devTask );

Und natürlich werden in JSON Schlüssel / Zeichenfolgen in doppelte Anführungszeichen gesetzt, aber dann verwenden Sie einfach JSON.stringify und übergeben JS-Objekte, sodass Sie sich darüber keine Gedanken machen müssen.

Ich hatte ein wenig damit zu kämpfen, bis ich dieses glückliche Medium zwischen JSON- und JS-Namenskonventionen fand.


1
hier gilt das gleiche. Das Empfangen von JSON mit snake_case auf dem Android-Client sieht umständlich aus !! Außerdem unterscheidet die Datenbank das Gehäuse nicht nach den Spaltennamen, sodass snake_case für die Datenbank am besten geeignet zu sein scheint.
Mythicalcoder

@mythicalcoder JSON in Java ist in seinem Kern nicht intrinsisch. Java verwendet nur externe Pakete für das Parsen von Java zB org.json, gson. Das Empfangen von snake_case-Daten tut nicht so weh ...JSONObject.get('snake_case_key_here')
Abel Callejo

9

Es scheint, dass es genügend Variationen gibt, die die Leute aus dem Weg räumen, um die Konvertierung von allen Konventionen in andere zu ermöglichen: http://www.cowtowncoder.com/blog/archives/cat_json.html

Insbesondere der erwähnte Jackson JSON-Parser bevorzugt bean_naming.


5
Kleinere Korrektur: Jackson verwendet standardmäßig die Java-Bean-Namenskonvention, die (unterer) Camel Case ist, wie z beanNaming.
StaxMan


0

Wie andere angegeben haben, gibt es keinen Standard, daher sollten Sie selbst einen auswählen. Hier sind einige Dinge zu beachten:

  1. Wenn Sie JavaScript verwenden, um JSON zu verwenden, bietet die Verwendung derselben Namenskonvention für Eigenschaften in beiden Fällen visuelle Konsistenz und möglicherweise einige Möglichkeiten für die Wiederverwendung von sauberem Code.

  2. Ein kleiner Grund, Kebab-Fälle zu vermeiden, besteht darin, dass die Bindestriche visuell mit -Zeichen kollidieren können , die in Werten erscheinen.

    {
      "bank-balance": -10
    }

1
snake_case verwendet Unterstriche, keine Bindestriche.
Percebus
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.