Привязка имени Clojure к данным REST JSON
Я - инженер внешнего интерфейса, наша команда переключает многие из наших старых сервисов на микросервисы, написанные в ближайшем будущем. Основная проблема, с которой я сталкиваюсь, заключается в том, что соглашения о наименовании clojure предпочитают дефисы отдельным словам в именах переменных. Это означает, что если вы преобразуете переменные в JSON, любой потребитель JS должен будет получить доступ к этим данным, используя скобочную нотацию, например, response['to-Отдельные слова']. Это явно не идеально. Я подумал, что поискать это будет легко, но я искал час, и похоже, что все прочитанные мной документы избегают этой проблемы, но используют отдельные слова. Кто-нибудь еще имел дело с этим.
1 ответ
Вы можете использовать библиотеку camel-snake-kebab, которая поддерживает большинство комбинаций. Вы можете подключить его к большинству библиотек JSON для Clojure (cheshire, cli-json, data.json - как упомянуто Elogent), так как они обычно имеют возможность предоставить функцию для обработки искажения имени свойства.
Например с Чеширом:
Сгенерируйте JSON с именами свойств дела верблюда:
(cheshire.core/generate-string {:my-clojure-key "abc"}
{:key-fn camel-snake-kebab.core/->camelCaseString})
Результат:
{"myClojureKey":"abc"}
Разобрать JSON, чтобы получить карту с ключами кебаба:
(cheshire.core/parse-string "{\"myClojureKey\":\"abc\"}"
camel-snake-kebab.core/->kebab-case-keyword)
Результат:
{:my-clojure-key "abc"}
Также есть пример для data.json в readme camel-snake-kebab.