2016-06-17 4 views
5

JSONとして送信する前に、ヘビケースからラクダにマップのキーを変更したいと思います。どうやってやるの?すべてのレスポンスをラップする機能であるか、それともいくつかのより低いレベル、つまりポイズンで実行する必要がある機能でなければならないのでしょうか?snake_caseキーマップをelixir phoenixのキーマップに変換してからJSON

おかげ

答えて

14

これは、内蔵にしていることエリクサーを知らない多く:

iex> Macro.underscore "SAPExample" 
"sap_example" 

iex> Macro.camelize "sap_example" 
"SapExample" 

iex> Macro.camelize "hello_10" 
"Hello10" 

参照ドキュメント: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

+0

乾杯!私はそれが言語でなければならないと思った、ちょうどそれがマクロモジュールにあることを期待していなかった:) – Nomad

+3

それは一般的なライブラリから使用すべきではないからです。 'UnicodeやElixir識別子では無効な文字をサポートしていないため、文字列をカメライズする一般的なメカニズムとしては使用しないでください。 – Mattias

1

Macro.underscore/1を使用する人もいますが、それは正しい方法ではありません。 Macroモジュール自体statesので:

この機能は、それがMacroモジュールに属している理由だと 、言語識別子/トークンを強調するように設計されました。ユニコードをサポートしていないので、一般的な 文字列をアンダースコアリングするメカニズムとして使用しないでください。または、 文字はエリクシール識別子では無効です。

ですので、他のライブラリを使用することをお勧めします。 recaseを使用することをお勧めします。 camelCaseだけでなく、文字列をどのような場合でも変換できます。

サードパーティのライブラリであるため、インストールする必要があります。

  1. depsmix.exsに次の行を追加します。あなたはそれを使用する方法です{:recase, "~> 0.1"}
  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

関連する問題