Poison似乎会自动将JSON对象数组转换为地图。我该怎么做才能防止这种情况发生?

时间:2018-04-01 21:36:18

标签: json elixir phoenix-framework elixir-poison

在我的应用程序中,我在其中一个API端点接受JSON对象:

# - word

在这个JSON对象中,有一个对象数组,例如结构可能是这样的:

word

在我的控制器中,当我尝试使用pipeline :api do plug :accepts, ["json"] end 访问对象数组时,我很惊讶地发现我得到了一个地图,索引是数组的原始索引,但是以字符串形式!

这意味着我几乎不可能恢复{ "a": "...", "b": [{"c": "...", "d": "..."}, {"c": "...", "d": "..."}] } 的原始排序,因为不能保证在Elixir中保留地图遍历的顺序。

我唯一可以做的就是将字符串索引转换回原始整数形式,然后在排序列表之前将地图转换为列表,这是很多没有明显理由的麻烦。

但是,当我有一个简单的JSON数组时,例如

params["b"]

然后我的控制器中的b确实给了我一个Elixir列表,它保留了它的顺序,正是我想要的。

为什么会这样?有什么办法可以保留该数组中对象的原始顺序吗?

1 个答案:

答案 0 :(得分:2)

原来我没有正确发送数据。默认情况下,Content-Type指定为application/x-www-form-urlencoded。它应更改为application/json,数据应为JSON.stringify(data)。请参阅jQuery ajax, how to send JSON instead of QueryString