Czy istnieje standard nazewnictwa JSON? Widzę większość przykładów, w których wszystkie małe litery są oddzielone podkreśleniem (small_case). Ale czy możesz użyć PascalCase lub camelCase?
Czy istnieje standard nazewnictwa JSON? Widzę większość przykładów, w których wszystkie małe litery są oddzielone podkreśleniem (small_case). Ale czy możesz użyć PascalCase lub camelCase?
Odpowiedzi:
Nie ma POJEDYNCZEGO standardu, ale widziałem 3 style, o których wspominasz („Pascal / Microsoft”, „Java” ( camelCase
) i „C” (podkreślenia, snake_case
)) - a także co najmniej jeden kebab-case
podobny longer-name
.
Wydaje się, że zależy to głównie od tego, jakie były tła twórców omawianej usługi; osoby z tłem c / c ++ (lub języki, które przyjmują podobne nazewnictwo, w tym wiele języków skryptowych, ruby itp.) często wybierają wariant podkreślenia; i odpoczywać podobnie (Java vs .NET). Wspomniana biblioteka Jackson, na przykład, przyjmuje konwencję nazewnictwa komponentów Java Bean (camelCase
)
AKTUALIZACJA: moja definicja „standardu” to JEDNA konwencja. Tak więc, chociaż można powiedzieć „tak, istnieje wiele standardów”, dla mnie istnieje wiele Naming Conventions
, z których żaden nie jest ogólnie „standardem”. Jeden z nich można uznać za standard dla konkretnej platformy, ale biorąc pod uwagę, że JSON jest używany do współdziałania między platformami, które mogą, ale nie muszą mieć większego sensu.
W tym dokumencie Przewodnik po stylu Google JSON (zalecenia dotyczące tworzenia interfejsów API JSON w Google),
Zaleca:
Nazwy właściwości muszą być wielbłądami , ciągami ASCII.
Pierwszym znakiem musi być litera, znak podkreślenia (_) lub znak dolara ($).
Przykład:
{
"thisPropertyIsAnIdentifier": "identifier value"
}
Mój zespół przestrzega tej konwencji.
Property Name Guidelines->Property Name Format->Choose meaningful property names.
.
W JSON nie ma standardowego nazewnictwa kluczy . Zgodnie z sekcją Obiekty specyfikacji:
Składnia JSON nie nakłada żadnych ograniczeń na ciągi używane jako nazwy ...
Co oznacza, że camelCase lub snake_case powinny działać poprawnie.
Nałożenie konwencji nazewnictwa JSON jest bardzo mylące. Można to jednak łatwo zrozumieć, jeśli podzielisz go na części.
Język programowania do generowania JSON
Sam JSON nie ma standardowej nazwy kluczy
Język programowania do analizy JSON
snake_case nadal będzie miał sens dla osób z wpisami Java, ponieważ istniejące biblioteki JSON dla Java używają tylko metod dostępu do kluczy zamiast standardowego dot.syntax . Oznacza to, że Java nie zaszkodziłoby tak bardzo dostępowi do kluczy snake_cased w porównaniu z innym językiem programowania, który może wykonywać dot.syntax .
Przykład pakietu Javaorg.json
JsonObject.getString("snake_cased_key")
Przykład pakietu Javacom.google.gson
JsonElement.getAsString("snake_cased_key")
Wybór odpowiedniej konwencji nazewnictwa JSON dla implementacji JSON zależy od stosu technologii. Są przypadki, w których można użyć snake_case , camelCase lub innej konwencji nazewnictwa.
Inną rzeczą do rozważenia jest waga, jaką należy przypisać generatorowi JSON w porównaniu z parserem JSON i / lub JavaScriptem frontonu. Zasadniczo większą wagę należy położyć na stronie generatora JSON niż po stronie parsera JSON. Wynika to z faktu, że logika biznesowa zwykle znajduje się po stronie generatora JSON.
Ponadto, jeśli strona parsera JSON jest nieznana, możesz zadeklarować, co kiedykolwiek będzie dla ciebie działać.
"Person":
nie jest camelCase :)
Szczególnie w przypadku NodeJS, jeśli pracuję z bazami danych, a moje nazwy pól są rozdzielone podkreśleniem, używam ich również w kluczach struct.
Wynika to z faktu, że pola db mają wiele akronimów / skrótów, więc coś takiego jak appSNSInterfaceRRTest wygląda nieco niechlujnie, ale app_sns_interface_rr_test jest ładniejszy.
W Javascript zmienne są wszystkie camelCase, a nazwy klas (konstruktorów) to ProperCase, więc zobaczysz coś podobnego
var devTask = {
task_id: 120,
store_id: 2118,
task_name: 'generalLedger'
};
lub
generalLedgerTask = new GeneralLedgerTask( devTask );
I oczywiście w JSON klucze / ciągi znaków są zawinięte w podwójne cudzysłowy, ale wtedy po prostu używasz JSON.stringify i przekazujesz obiekty JS, więc nie musisz się o to martwić.
Walczyłem z tym trochę, dopóki nie znalazłem tego szczęśliwego medium między konwencjami nazewnictwa JSON i JS.
org.json
, gson
. Odbieranie danych skrzynki węża nie jest tak bardzo bolesne ...JSONObject.get('snake_case_key_here')
Wydaje się, że istnieje wystarczająca różnorodność, że ludzie robią wszystko, aby umożliwić konwersję ze wszystkich konwencji na inne: http://www.cowtowncoder.com/blog/archives/cat_json.html
W szczególności wspomniany parser Jackson JSON woli bean_naming
.
beanNaming
.
Myślę, że JSON nie ma oficjalnej konwencji nazewnictwa, ale możesz śledzić liderów branży, aby zobaczyć, jak to działa.
Google, która jest jedną z największych firm informatycznych na świecie, ma przewodnik w stylu JSON: https://google.github.io/styleguide/jsoncstyleguide.xml
Korzystając z tego, możesz znaleźć przewodnik po innych stylach, który Google definiuje, tutaj: https://github.com/google/styleguide
Jak stwierdzili inni, nie ma standardu, więc powinieneś sam go wybrać. W tym celu należy wziąć pod uwagę kilka rzeczy:
Jeśli używasz JavaScript do konsumpcji JSON, to użycie tej samej konwencji nazewnictwa dla właściwości w obu zapewni spójność wizualną i możliwe pewne możliwości czystszego ponownego użycia kodu.
Małym powodem do uniknięcia przypadku kebab jest to, że łączniki mogą wizualnie kolidować ze -
znakami wyświetlanymi w wartościach.
{
"bank-balance": -10
}