Конвенція про іменування JSON [закрита]


379

Чи існує стандарт щодо іменування JSON? Я бачу більшість прикладів, використовуючи всі малі регістри, розділені підкресленням (нижній_запис). Але чи можете ви використовувати PascalCase чи camelCase?


12
Мені було цікаво, що обрали деякі лідери галузі. API Twitter та Facebook використовують snake_case, тоді як Microsoft та Google використовують camelCase.
Джастін

2
@Justin це тому, що Twitter використовує Ruby, а Facebook використовує PHP. Ruby та PHP перетворюються на snake_case. Microsoft та Google добре використовують C / .NET та Java відповідно. О, це правильно. Net і Java можуть бути у camelCase, можливо. Вся справа в умовах мов програмування
Абель Каллехо

1
Немає стандарту, але, здається, умовою є використання стандарту технології приймальної системи.
Мартін

1
Все правильно, немає жодних жорстких домовленостей для імен / ключів у JSON. Хоча, я настійно рекомендую уникати шашлику, оскільки до нього не можна отримати позначення dot (.) У JavaScript, і до нього потрібно звернутися за допомогою позначення масиву [], яке, на мою думку, є втомливим.
saurabh

2
Закритий, як насамперед, на основі думки? ОП просила факти щодо можливостей / обмежень формату, а не для когось. Він сказав "ти можеш", а не "ти повинен". Можливо, ОП не сказала цього досить чітко для цих п’яти осіб, але вам доведеться мати досить слабке розуміння читання, щоб не зрозуміти, про що він питає.
dynamichael

Відповіді:


251

Не існує єдиного стандарту, але я бачив 3 згадані вами стилі ("Pascal / Microsoft", "Java" ( camelCase) і "C" (підкреслення, snake_case)), а також принаймні ще один, kebab-caseяк longer-name).

В основному, схоже, це залежить від того, який досвід мали розробники відповідної послуги; ті, хто має c / c ++ фон (або мови, які використовують подібні імена, що включає багато мов сценарію, рубін тощо), часто вибирають варіант підкреслення; і відпочивати аналогічно (Java vs .NET). Бібліотека Джексона, про яку згадувалося, наприклад, передбачає конвенцію про іменування бобів Java ( camelCase)

ОНОВЛЕННЯ: моє визначення поняття "стандарт" - це ЄДИННА конвенція. Тож, хоча можна було б стверджувати "так, є багато стандартів", для мене їх багато Naming Conventions, жоден з яких не є "загальним" стандартом. Один з них можна вважати еталоном для конкретної платформи, але враховуючи, що JSON використовується для взаємодії між платформами, яка може мати або не мати особливого сенсу.


4
Дотримуватися фонових зображень важливо, але JSON дотримується стандарту Javascript. Ваше перше твердження не зовсім коректно. Але напевно дотримуйтесь конвенцій про іменування вашої команди.
Анубіан Нооб

8
Було б цікаво побачити деякі статистичні дані, оскільки існує постійне тертя між людьми, які претендують на зв’язок між JSON та Javascript (крім історичної спадщини), і тими, хто думає, що зараз мало що з'єднує JSON з Javascript. Я належу до останнього табору. Але мені було б цікаво знати відносні схеми використання.
StaxMan

@StaxMan C # у більшості випадків використовує PascalCase, а не camelCase.
ArtOfCode

@ArtOfCode так. Який твій погляд? (також паскаль-футляр, який іноді називають "верхньою справою верблюда")
StaxMan

@StaxMan Ви можете розглянути можливість оновлення своєї відповіді, щоб включити згадку про посібник зі стилів Googles
garrettmac

402

У цьому документі Посібник зі стилів Google JSON (рекомендації щодо створення API JSON в Google),

Він рекомендує:

  1. Імена властивостей повинні бути camelCrozen , рядки ASCII.

  2. Першим символом має бути буква, підкреслення (_) або знак долара ($).

Приклад:

{
  "thisPropertyIsAnIdentifier": "identifier value"
}

Моя команда дотримується цієї конвенції.


8
Очевидно, Google змінив керівні принципи, нічого не можна знайти про справу верблюда або починаючи з листа, _ або $ в документі ...
TheEye

32
@TheEye Це все ще є, потрібно просто натиснути спадне меню.
gdw2

5
Добре око, @ gdw2. Для інших людей у ​​майбутньому, якщо ви натиснете кнопку зі стрілкою Property Name Guidelines->Property Name Format->Choose meaningful property names..
Panzercrisis

3
Чи може хтось пояснити, чому і коли ви використовуєте підкреслення для префіксу імені властивості? Довідка була б корисною, а не лише думкою.
Шон Гловер

4
посилаючись на Google, це не відповідь проповідача. вони просто підтримують певну конвенцію / настанову, і, схоже, ява має сенс, оскільки вони досить орієнтовані на Java.
Thomas Andreè Wang

185

Приміщення

У JSON немає стандартного іменування ключів . Відповідно до розділу Об'єкти специфікації:

Синтаксис JSON не накладає жодних обмежень на рядки, що використовуються як імена, ...

Що означає, що camelCase або snake_case повинні добре працювати.

Рушійні фактори

Накладення конвенції про іменування JSON дуже заплутано. Однак це можна легко зрозуміти, якщо розбити його на компоненти.

  1. Мова програмування для генерації JSON

    • Python - змія
    • PHP - змія
    • Java - camelCase
    • JavaScript - camelCase
  2. Сам JSON не має стандартного іменування клавіш

  3. Мова програмування для розбору JSON

    • Python - змія
    • PHP - змія
    • Java - camelCase
    • JavaScript - camelCase

Компоненти суміші відповідають

  1. Python »JSON» Python - snake_case - одностайний
  2. Python »JSON» PHP - snake_case - одностайний
  3. Python »JSON» Java - snake_case - дивіться проблему Java нижче
  4. Python »JSON» JavaScript - snake_case матиме сенс; прикручуйте передню частину все одно
  5. Python »JSON» ви не знаєте - snake_case матиме сенс; прикрутити парсер все одно
  6. PHP »JSON» Python - snake_case - одностайний
  7. PHP »JSON» PHP - snake_case - одноголосний
  8. PHP »JSON» Java - snake_case - дивіться проблему Java нижче
  9. PHP »JSON» JavaScript - snake_case матиме сенс; прикручуйте передню частину все одно
  10. PHP »JSON» ви не знаєте - snake_case матиме сенс; прикрутити парсер все одно
  11. Java »JSON» Python - snake_case - дивіться проблему Java нижче
  12. Java »JSON» PHP - snake_case - дивіться проблему Java нижче
  13. Java »JSON» Java - camelCase - одностайний
  14. Java »JSON» JavaScript - camelCase - одностайний
  15. Java »JSON» ви не знаєте - camelCase матиме сенс; прикрутити парсер все одно
  16. JavaScript »JSON» Python - snake_case матиме сенс; прикручуйте передню частину все одно
  17. JavaScript »JSON» PHP - snake_case матиме сенс; прикручуйте передню частину все одно
  18. JavaScript »JSON» Java - camelCase - одностайний
  19. JavaScript »JSON» JavaScript - camelCase - Оригінал

Проблема Java

snake_case все одно матиме сенс для тих, хто має записи на Java, оскільки існуючі бібліотеки JSON для Java використовують лише методи доступу до клавіш замість стандартного dot.syntax . Це означає, що Java не завадить так сильно отримати доступ до ключів snake_cased порівняно з іншою мовою програмування, яка може виконувати dot.syntax .

Приклад пакету Javaorg.json

JsonObject.getString("snake_cased_key")

Приклад пакету Javacom.google.gson

JsonElement.getAsString("snake_cased_key")

Деякі реальні реалізації

Висновки

Вибір правильної умови іменування JSON для вашої реалізації JSON залежить від вашої технології стеку. Є випадки, коли можна використовувати snake_case , camelCase або будь-яку іншу конвенцію про іменування.

Інша річ, яку слід врахувати, - це вага, який слід надати JSON-генератору проти JSON-аналізатора та / або переднього JavaScript. Як правило, більше ваги слід приділяти стороні генератора JSON, а не стороні JSON-аналізатора. Це тому, що бізнес-логіка зазвичай знаходиться на стороні генератора JSON.

Крім того, якщо сторона аналізатора JSON невідома, ви можете заявити, що коли-небудь може працювати для вас.


2
"Person":не camelCase :)
stoft

1
@stoft це, мабуть, тому, що вони також дотримувалися конвенції schema.org. Почати ключ із великої літери означає, що це суто лексичний запас. Починати ключ з малої літери означає, що це властивість лексики.
Абель Каллехо

2
Я не погоджуюся з цими ідеями, просто тому що Python backend> Java frontend має бути camelCase, але потім ви додаєте Python frontend і у вас є компрометований бекенд і один frontend. Має бути, як у бекенда є "стандарт".
Парсертам у легких місцях

2
Мене тут хвилює те, що є посилання на стек "Ваші технології". Виробник JSON, особливо якщо його обслуговує HTTP-сервер, не повинен знати, хто або що його споживає, або з яких причин. Якщо JSON використовується як метод комунікації між багатьма виробниками та споживачами, то стека технологій виробника не повинна враховуватись.
Роббі Уерехам

1
@RobbieWareham Я якось погоджуюся з цим. Вся справа в тому, що "за стандартами" немає офіційної конвенції про іменування. Тож, мабуть, варто обрати "фактично", щоб подивитися на стек технологій. Я думаю, що перегляд технологічного стеку - це найкращий шлях. Погляньте на facebook, чи історично вони шанували JavaScript та використовували snakeCase? Ні! Вони вирішили дотримуватися Snake_case PHP.
Абель Каллехо

18

Примітно для мене на NodeJS, якщо я працюю з базами даних, а мої поля розділені підкресленням, я також використовую їх у клавішах структури.

Це тому, що у полях db є багато абревіатур / скорочень, тому щось на зразок appSNSInterfaceRRTest виглядає дещо брудно, але app_sns_interface_rr_test приємніше.

У змінних Javascript всі назви camelCase та класів (конструктори) - ProperCase, тому ви побачите щось на зразок

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

або

generalLedgerTask = new GeneralLedgerTask( devTask );

І звичайно, JSON ключі / рядки загортаються в подвійні лапки, але тоді ви просто використовуєте JSON.stringify і передаєте JS-об’єкти, тому не потрібно про це турбуватися.

Я трохи боровся з цим, поки не знайшов цього щасливого середовища між конвенціями про іменування JSON та JS.


1
те ж саме. Отримання JSON з snake_case у клієнта Android виглядає незручно !! Крім того, база даних не відрізняє корпус для імен стовпців, тому snake_case, здається, є найкращим для бази даних.
міфічнийкодер

@mythicalcoder JSON на Java не є сутнісним у своїй основі. Java використовує тільки зовнішні пакети для розбору Java , наприклад org.json, gson. Отримання даних snake_case не так сильно шкодить ...JSONObject.get('snake_case_key_here')
Abel Callejo

9

Здається, що існує достатня кількість варіантів, щоб люди вийшли зі свого шляху, щоб дозволити перехід від усіх конвенцій до інших: http://www.cowtowncoder.com/blog/archives/cat_json.html

Зокрема, згаданий парсер Jackson JSON віддає перевагу bean_naming.


5
Незначна корекція: Джексон за замовчуванням застосовує конвенцію про іменування бобів Java, яка є (нижчою) справою верблюда, як beanNaming.
StaxMan

0

Я думаю, що не існує офіційної конвенції про іменування JSON, але ви можете слідувати за деякими лідерами галузі, щоб побачити, як це працює.

Google, яка є однією з найбільших ІТ-компаній світу, має керівництво по стилю JSON: https://google.github.io/styleguide/jsoncstyleguide.xml

Користуючись перевагою, ви можете знайти посібник з інших стилів, який визначає Google, тут: https://github.com/google/styleguide


0

Як заявили інші, немає стандарту, тож вибирайте його самостійно. Ось декілька речей, які слід враховувати при цьому:

  1. Якщо ви використовуєте JavaScript для споживання JSON, то використання однакових правил іменування для властивостей обох забезпечить візуальну узгодженість та, можливо, певні можливості для більш чистого використання коду.

  2. Невелика причина уникнути шашлику - це те, що дефіси можуть візуально зіткнутися з -символами, які відображаються у значеннях.

    {
      "bank-balance": -10
    }

1
snake_case використовує підкреслення, а не тире.
percebus
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.