Странный формат json-ответа

У меня есть приложение Phoenix, которое в основном представляет собой API. У меня есть следующая точка зрения:

defmodule TattooBackend.Web.API.V1.AccountView do
  use TattooBackend.Web, :view

  alias TattooBackend.Repo

  def render("my_account.json", %{account: account}) do
    account = account |> Repo.preload(:studio)
    studio  = account.studio

    %{
      id: account.id,
      email: account.email,
      studio: %{
        id: account.studio.id,
        name: account.studio.name
      }
    }
  end
end

Когда я запускаю эту конечную точку в Postman, она возвращает ответ в следующем формате:

{
    "studio": {
        "name": "asdasdsadsa123123",
        "id": 4
    },
    "id": 1,
    "email": "[email protected]"
}

Почему «id» и «email» последние? Они должны быть первыми...


person Mateusz Urbański    schedule 20.06.2017    source источник
comment
Карты неупорядочены в Elixir: stackoverflow.com/questions/38386314/   -  person Dogbert    schedule 20.06.2017
comment
Они также не упорядочены в JS, откуда исходит JSON: порядок свойств"> stackoverflow.com/questions/5525795/   -  person Mladen Jablanović    schedule 20.06.2017
comment
Удивительное письмо во снипе :)   -  person PatNowak    schedule 21.06.2017


Ответы (1)


Вам не гарантируется возврат заказа, и на самом деле это нормально. Если порядок этих значений имеет значение, то ваш потребитель, вероятно, должен упорядочить их так, как он ожидает, чтобы каждый раз это выполнялось правильно.

Пары ключ-значение на карте не следуют порядку

источник: https://hexdocs.pm/elixir/Map.html

person Tyler Willingham    schedule 20.06.2017