Чи погана практика використовувати дефіси в клавішах JSON?


12

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

Приклад:

var something = {
  "some-value": 'thing'
}

Vs

var something = {
  "someValue": 'thing',
  "some_other_value": 'thing_two'
}

4
Про формати корисного навантаження REST не має нічого сказати.
Ерік Штейн

2
Для чого ви використовуєте шашлик у JSON? Люди зазвичай використовують camelCase для JSON, тому що це завжди хороша практика дотримуватися конвенцій іменування середовища програмування, і це стандартна практика використовувати camelCase для змінних в JavaScript. Хоча я йду за припущенням, що ви використовуєте JSON для спілкування з JavaScript.
Альтернатекс

1
Я бачу, що питання позначене javascript, але саме питання, мабуть, стосується API між різними мовами / бібліотеками. Якщо вас турбує javascript, зауважте, що позначення крапок не працює з дефісами.
Ізката

5
Це насправді не погана практика, оскільки JSON є незалежною від мови, і тому вона не повинна обмежуватися синтаксисом якоїсь конкретної мови. З огляду на це, має сенс використовувати лише буквено-цифрові символи, оскільки це може відображати безпосередньо ідентифікатори на всіх основних мовах, тому це просто призведе до найменшої кількості проблем із картографуванням.
ЖакB

1
@Alternatex: +1 для "шашлику" :-)
gnasher729

Відповіді:


13

Ви можете використовувати що завгодно як ключі JSON, доки він дійсний UTF-8, не містить нульових кодових точок, і було б корисно, якби ви могли представити ключ як рядок на вибраній мові програмування. Я можу порекомендувати не використовувати різні представлення Unicode одного і того ж рядка (наприклад, "Ä", записане у вигляді одного або двох кодових пунктів).

Читання коментарів: Схоже, деякі намагаються створити класи зі змінними екземплярів, які відповідають клавішам у словниках JSON. Що, звичайно, не працює, якщо ваш ключ є "деяким значенням", якщо ви не пишете COBOL. Я думаю, це неправильно. У мене є модельні класи, які розроблені так, як мені хочеться. JSON просто використовується для заповнення модельних класів. Я візьму все, що сервери вирішили використовувати для ключів, і вкладу його в мої об’єкти моделі.


1
urg, ви задаєте питання, як ваша споживаюча програма звертається до клавіш json. Зазвичай це робиться шляхом аналізу json як об’єкта. Використання гіпок або інших символів, які перешкоджають цьому, просто ускладнює життя вашим споживачам
Еван

І це дійсно: {"❓": "✅"}
Вініцій Бразилія

1
Як дефіси запобігають чомусь? Я отримую словник, і може використовувати "якийсь ключ" як ключ, я навіть можу використовувати "❓" як ключ.
gnasher729

9

Є безліч систем серіалізації JSON, які більш ніж здатні обробляти відображення між іменами полів, які не підходять для використання мовою, з якою вони інтегруються. У більшості випадків вони не складні у використанні і вимагають лише трохи додаткових зусиль. В ідеальному світі вам не доведеться, але якщо ваш API вже використовує тире, змінити це було б гірше, ніж хвороба. Також зауважте, що використання тире - це найпоширеніший стиль на певних мовах, особливо на основі LISP, тому, мабуть, є мовчазна меншина споживачів вашого API, які раді бачити тире, а не інший формат.


Я буду голосувати за це якнайшвидше, я знайшов для цього розуміння, дякую.
Метт Оаксака

1

Провівши деякий час у галузі та працюючи в декількох системах. Я не думаю, що є найкраща практика чи належний кожух для ключів JSON. Найважливішим аспектом будь-якого форматування (корпус / стиль коду / тощо) є послідовність та прийняття команди.

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

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