Кажется, яд автоматически конвертирует массив объектов JSON в карту. Что я могу сделать, чтобы предотвратить это?
В моем приложении я принимаю объект JSON в одной из конечных точек API:
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"]
в моем контроллере действительно есть список эликсира, который сохранил свой порядок и это именно то, что я хочу.
Почему это случилось? Что я могу сделать, чтобы сохранить первоначальный порядок объектов в этом массиве?
1 ответ
Оказывается, я не правильно отправлял данные. Тип контента был указан как application/x-www-form-urlencoded
по умолчанию. Это должно быть изменено на application/json
и данные должны быть JSON.stringify(data)
вместо. Посмотрите jQuery ajax, как отправить JSON вместо QueryString.