将snake_case键控映射转换为ellir,phoenix中的camelCase键控映射,然后将内容作为JSON发送

alm*_*man 7 elixir phoenix-framework

在将内容作为JSON发送之前,我想将elixir中的地图键从snake case更改为camel case.我怎样才能做到这一点?它应该只是一个函数,我将包装每个响应,还是应该在较低级别,即在毒药中完成?

谢谢

use*_*320 15

许多人不知道这是内置于Elixir:

iex> Macro.underscore "SAPExample"
"sap_example"

iex> Macro.camelize "sap_example"
"SapExample"

iex> Macro.camelize "hello_10"
"Hello10"
Run Code Online (Sandbox Code Playgroud)

见文档:http://elixir-lang.org/docs/stable/elixir/Macro.html#underscore/1

实施:https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/macro.ex#L1192

  • 那是因为它不应该从一般的图书馆使用.`不要将它用作camelizing字符串的一般机制,因为它不支持Unicode或Elixir标识符中无效的字符. (3认同)

sob*_*evn 6

可能使用Macro.underscore/1,但这不是正确的方法。由于Macro模块本身指出

此功能旨在强调语言标识符/标记,因此它属于Macro模块。请勿将其用作下划线字符串的通用机制,因为它不支持Unicode或在Elixir标识符中无效的字符。

因此,最好使用其他一些库。我建议使用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"
Run Code Online (Sandbox Code Playgroud)

您可以在这里找到文档:https : //hexdocs.pm/recase/readme.html

这里的回购:https : //github.com/sobolevn/recase