在我的应用程序中,我在其中一个API端点接受JSON对象:
# - word
在这个JSON对象中,有一个对象数组,例如结构可能是这样的:
word
在我的控制器中,当我尝试使用pipeline :api do
plug :accepts, ["json"]
end
访问对象数组时,我很惊讶地发现我得到了一个地图,索引是数组的原始索引,但是以字符串形式!
这意味着我几乎不可能恢复{
"a": "...",
"b": [{"c": "...", "d": "..."}, {"c": "...", "d": "..."}]
}
的原始排序,因为不能保证在Elixir中保留地图遍历的顺序。
我唯一可以做的就是将字符串索引转换回原始整数形式,然后在排序列表之前将地图转换为列表,这是很多没有明显理由的麻烦。
但是,当我有一个简单的JSON数组时,例如
params["b"]
然后我的控制器中的b
确实给了我一个Elixir列表,它保留了它的顺序,正是我想要的。
为什么会这样?有什么办法可以保留该数组中对象的原始顺序吗?
答案 0 :(得分:2)
原来我没有正确发送数据。默认情况下,Content-Type指定为application/x-www-form-urlencoded
。它应更改为application/json
,数据应为JSON.stringify(data)
。请参阅jQuery ajax, how to send JSON instead of QueryString。