0

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

pipeline :api do
  plug :accepts, ["json"]
end

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

{
  "a": "...",
  "b": [{"c": "...", "d": "..."}, {"c": "...", "d": "..."}]
}

在我的控制器中,当我尝试使用 访问对象数组时params["b"],我惊讶地发现我得到了一个映射,索引是数组的原始索引,但是是字符串形式!

这意味着我几乎不可能恢复 的原始顺序b,因为不能保证在 Elixir 中保留地图遍历的顺序。

我唯一能做的似乎是将字符串索引转换回其原始整数形式,然后将映射转换为列表,然后对列表进行排序,这很麻烦,没有明显的原因。

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

{
  "a": "...",
  "b": ["itemA", "itemB"]
}

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

为什么会这样?我能做些什么来保留该数组中对象的原始顺序吗?

4

1 回答 1

2

原来我一开始没有正确发送数据。Content-Type 被指定为application/x-www-form-urlencoded默认值。它应该改为,application/json数据应该JSON.stringify(data)改为。请参阅jQuery ajax,如何发送 JSON 而不是 QueryString

于 2018-04-02T11:09:03.650 回答