преобразовать карту с ключом snake_case в карту с ключом camelCase в elixir, phoenix перед отправкой материала как JSON

Я хочу изменить ключи карт в эликсире с футляра змеи на футляр верблюда перед отправкой материала в формате JSON. Как я могу это сделать? Должна ли это быть просто функция, в которую я буду заключать каждый ответ, или это нужно делать на каком-то более низком уровне, то есть в Poison?

Спасибо


person almeynman    schedule 17.06.2016    source источник


Ответы (3)


Многие не знают, что это встроено в Эликсир:

iex> Macro.underscore "SAPExample"
"sap_example"

iex> Macro.camelize "sap_example"
"SapExample"

iex> Macro.camelize "hello_10"
"Hello10"

См. Macro.underscore/1 документы или реализация

person user734320    schedule 02.08.2016
comment
Ваше здоровье! Я думал, что это должно быть на языке, просто не ожидал, что это будет в модуле Macro :) - person almeynman; 02.08.2016
comment
Это потому, что его нельзя использовать из общих библиотек. Do not use it as a general mechanism for camelizing strings as it does not support Unicode or characters that are not valid in Elixir identifiers. - person Mattias; 08.10.2016
comment
в заголовке вопроса написано camelCase, но эти примеры не включают строку этого формата (первая буква в нижнем регистре). Для меня это не должен быть принятый ответ, пока не будет отредактирован заголовок вопроса. - person Sgnl; 20.09.2018

Можно использовать Macro.underscore/1, но это неправильный способ. Поскольку сам модуль Macro recase. Он может преобразовать строку в любой регистр, а не только в camelCase.

Поскольку это сторонняя библиотека, вам необходимо ее установить.

  1. добавьте эту строку в mix.exs в deps: {:recase, "~> 0.6"} Убедитесь, что используете последнюю версию!
  2. запустить mix deps.get

Вот как вы его используете:

Recase.to_camel("some-value")
# => "someValue"

Recase.to_camel("Some Value")
# => "someValue"

Вы можете найти документы здесь: https://hexdocs.pm/recase/readme.html

И репо здесь: https://github.com/sobolevn/recase

person sobolevn    schedule 09.07.2017

Намного лучше использовать библиотеку Inflex: https://github.com/nurugger07/inflex#underscore

iex> Inflex.underscore("camelCase")
"camel_case"
person Michael Sitchenko    schedule 28.10.2016
comment
это противоположно тому, чего хочет вопрос. - person Sgnl; 20.09.2018