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?
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.
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:
Eigenschaftsnamen müssen camelCased , ASCII-Zeichenfolgen sein.
Das erste Zeichen muss ein Buchstabe, ein Unterstrich (_) oder ein Dollarzeichen ($) sein.
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.
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.
Programmiersprache zum Generieren von JSON
Python - snake_case
PHP - snake_case
Java - camelCase
JavaScript - camelCase
JSON selbst hat keine Standardbenennung von Schlüsseln
Programmiersprache zum Parsen von JSON
Python - snake_case
PHP - snake_case
Java - camelCase
JavaScript - camelCase
Mischen Sie die Komponenten
Python »JSON» Python - snake_case - einstimmig
Python »JSON» PHP - snake_case - einstimmig
Python »JSON» Java - snake_case - siehe das Java-Problem unten
Python »JSON» JavaScript - snake_case macht Sinn; Schrauben Sie das Frontend trotzdem fest
Python »JSON», das Sie nicht kennen - snake_case macht Sinn; Schrauben Sie den Parser trotzdem
PHP »JSON» Python - snake_case - einstimmig
PHP »JSON» PHP - snake_case - einstimmig
PHP »JSON» Java - snake_case - siehe das Java-Problem unten
PHP »JSON» JavaScript - snake_case macht Sinn; Schrauben Sie das Frontend trotzdem fest
PHP »JSON», das Sie nicht kennen - snake_case macht Sinn; Schrauben Sie den Parser trotzdem
Java »JSON» Python - snake_case - siehe das Java-Problem unten
Java »JSON» PHP - snake_case - siehe das Java-Problem unten
Java »JSON» Java - camelCase - einstimmig
Java »JSON» JavaScript - camelCase - einstimmig
Java »JSON», das Sie nicht kennen - camelCase macht Sinn; Schrauben Sie den Parser trotzdem
JavaScript »JSON» Python - snake_case macht Sinn; Schrauben Sie das Frontend trotzdem fest
JavaScript »JSON» PHP - snake_case macht Sinn; Schrauben Sie das Frontend trotzdem fest
JavaScript »JSON» Java - camelCase - einstimmig
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 .
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.
@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'};
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.
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')
Wie andere angegeben haben, gibt es keinen Standard, daher sollten Sie selbst einen auswählen. Hier sind einige Dinge zu beachten:
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.
Ein kleiner Grund, Kebab-Fälle zu vermeiden, besteht darin, dass die Bindestriche visuell mit -Zeichen kollidieren können , die in Werten erscheinen.
Antworten:
Es gibt keinen EINZELNEN Standard, aber ich habe 3 Stile gesehen, die Sie erwähnen ("Pascal / Microsoft", "Java" (
camelCase
) und "C" (Unterstrichesnake_case
)) - sowie mindestens einen weiteren,kebab-case
wielonger-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.quelle
In diesem Dokument Google JSON Style Guide (Empfehlungen zum Erstellen von JSON-APIs bei Google)
Es wird empfohlen, dass:
Eigenschaftsnamen müssen camelCased , ASCII-Zeichenfolgen sein.
Das erste Zeichen muss ein Buchstabe, ein Unterstrich (_) oder ein Dollarzeichen ($) sein.
Beispiel:
Mein Team folgt dieser Konvention.
quelle
Property Name Guidelines->Property Name Format->Choose meaningful property names.
.Prämisse
In JSON gibt es keine Standardbenennung von Schlüsseln . Gemäß dem Abschnitt Objekte der Spezifikation:
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.
Programmiersprache zum Generieren von JSON
JSON selbst hat keine Standardbenennung von Schlüsseln
Programmiersprache zum Parsen von JSON
Mischen Sie die Komponenten
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
PaketJsonObject.getString("snake_cased_key")
Beispiel für das Java-
com.google.gson
PaketJsonElement.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.
quelle
"Person":
ist nicht camelCase :)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
oder
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.
quelle
org.json
,gson
. Das Empfangen von snake_case-Daten tut nicht so weh ...JSONObject.get('snake_case_key_here')
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
.quelle
beanNaming
.Ich denke, dass es für JSON keine offizielle Namenskonvention gibt, aber Sie können einigen Branchenführern folgen, um zu sehen, wie es funktioniert.
Google, eines der größten IT-Unternehmen der Welt, verfügt über einen JSON-Styleguide: https://google.github.io/styleguide/jsoncstyleguide.xml
Weitere Vorteile, die Google definiert, finden Sie hier: https://github.com/google/styleguide
quelle
Wie andere angegeben haben, gibt es keinen Standard, daher sollten Sie selbst einen auswählen. Hier sind einige Dinge zu beachten:
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.
Ein kleiner Grund, Kebab-Fälle zu vermeiden, besteht darin, dass die Bindestriche visuell mit
-
Zeichen kollidieren können , die in Werten erscheinen.quelle