Ada*_*hip 0 elixir json-deserialization plug
使用Plug.Parsers,可以配置用于解析 JSON 请求的模块:
plug Plug.Parsers,
parsers: [:json],
json_decoder: Jason
Run Code Online (Sandbox Code Playgroud)
但是,使用此语法Jason.decode!/2会使用空opts参数进行调用。
怎样才能给指定的选项提供呢json_decoder?例如,我想将keys: :atoms选项传递给Jason.decode!/2.
除了模块名称之外,还可以传递{Module, :function, args}元组作为:json_decoder参数。这可用于自定义解码器的参数:
plug Plug.Parsers,
parsers: [:json],
json_decoder: {Jason, :decode!, [[keys: :atoms]]},
Run Code Online (Sandbox Code Playgroud)
这将导致解析器调用Jason.decode!(data, keys: :atoms).
列表[[]]中的语法有点奇怪,但由于Plug.Parsers处理合并选项的方式,它是必要的。出于同样的原因,另一种方法是在元组中提供空列表,并直接将选项包含为以下选项Plug.Parsers:
plug Plug.Parsers,
parsers: [:json],
json_decoder: {Jason, :decode!, []},
keys: :atoms
Run Code Online (Sandbox Code Playgroud)
我更喜欢前者,因为选项的范围更好,但如果某些解析器共享公共参数,后者可能会很有用。
| 归档时间: |
|
| 查看次数: |
791 次 |
| 最近记录: |