Search code examples
jsonelm

How to convert from String to Int in Json.Decoder


Here's my decoder:

decodeData : Json.Decoder (Id, String)
decodeData =
  Json.at ["data", "0"]
    <| Json.object2 (,)
      ("id" := Json.int)
      ("label" := Json.string)

The id should logically be Int however my backend sends it as String (e.g. we get "1" instead of 1).

How can I cast the decoded value to Int?


Solution

  • ... and to answer myself :) I found the solution in this Flickr example

    decodeData : Json.Decoder (Id, String)
    decodeData =
      let number =
        Json.oneOf [ Json.int, Json.customDecoder Json.string String.toInt ]
      in
        Json.at ["data", "0"]
          <| Json.object2 (,)
            ("id" := number)
            ("label" := Json.string)