Étant donné les types suivants:Decode imbriquée valeur JSON dans Elm (0,18)
type alias Wrapper =
{ data : Data }
type alias Data =
{ name : String }
Et le JSON suivant:
{"data": {"name": "Keith"}}
Comment puis-je écrire un décodeur qui me permettra de transformer une HTTP réponse dans une instance de l'alias de type Wrapper
?
J'ai essayé un certain nombre d'approches en utilisant les bibliothèques de base, Json.Decode.Pipeline et Json.Decode.Extra, sans trouver de solution réalisable.
Voilà ma dernière tentative:
dataDecoder =
succeed Data
|> andMap (field "name" Decode.string)
wrapperDecoder =
succeed Wrapper
|> andMap (field "data" dataDecoder)
qui se traduit par:
BadPayload "Expecting an object with a field named
name
but instead got: {\"data\":{\"name\":\"foo\"}}" { status = { code = 200, message = "OK" }, headers = Dict.fromList [("cache-control","max-age=0, private, must-revalidate"),("content-type","application/json; charset=utf-8")], url = " http://localhost:5000//users/foo ", body = "{\"data\":{\"name\":\"foo\"}}" }
EDIT:
Cette dissolution étant un problème utilisateur final. Je était passant le décodeur correct à Http.post
, mais Http.send
n'appelait pas réellement la fonction enveloppant Http.post
. Doh.
Heureux de vous voir compris! –