2017-06-20 2 views
0

J'ai une application Phoenix qui est essentiellement API. J'ai la vue suivante:Le format étrange de la réponse json

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 

Quand je tire ce point de terminaison dans Postman renvoie la réponse au format suivant:

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

Pourquoi le « id » et « e-mail » sont la dernière? Ils devraient être les premiers ...

+4

Les cartes sont à Elixir non ordonnée: https://stackoverflow.com/questions/38386314/why- elixirs-mapset-devient-unordered-after-32-elements – Dogbert

+3

Ils ne sont pas non plus commandés dans JS, d'où provient JSON: https://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property- ordre –

+3

Impressionnant email dans l'extrait :) – PatNowak

Répondre

1

Vous n'êtes pas garanti un ordre de retour et vraiment, c'est correct. Si l'ordre de ces valeurs est important, votre consommateur devrait probablement gérer les commandes de la manière attendue afin que tout se passe correctement à chaque fois.

paires clé-valeur dans une carte ne suivent pas un ordre

source: https://hexdocs.pm/elixir/Map.html