Кажется, яд автоматически конвертирует массив объектов 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.

Другие вопросы по тегам