Привязка имени 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.

Другие вопросы по тегам