Giả sử JSON của bạn là thực sự đặt giá trị số bên trong dấu ngoặc kép (có nghĩa là bạn đang phân tích các giá trị JSON "1493287973015"
và không 1493287973015
), bộ giải mã của bạn có thể trông như thế này:
import Json.Decode exposing (..)
import Date
import String
stringToDate : Decoder Date.Date
stringToDate =
string
|> andThen (\val ->
case String.toFloat val of
Err err -> fail err
Ok ms -> succeed <| Date.fromTime ms)
ý rằng stringToDate
doesn' t được thông qua bất kỳ tham số, như trái ngược với ví dụ của bạn, trong đó bạn đã cố gắng để vượt qua một Decoder String
như một tham số. Đó không phải là cách giải mã hiệu quả. Thay vào đó, điều này có thể được thực hiện bằng cách xây dựng dựa trên bộ giải mã nguyên thủy hơn, trong trường hợp này, chúng ta bắt đầu với bộ giải mã string
from Json.Decode
.
Phần andThen
sau đó lấy giá trị chuỗi do bộ giải mã đưa ra và cố gắng phân tích cú pháp đó thành phao. Nếu nó là Float
hợp lệ, nó được đưa vào Date.fromTime
, nếu không, đó là lỗi.
Các chức năng fail
và succeed
bao bọc các giá trị thông thường bạn đang xử lý thành Decoder Date.Date
ngữ cảnh để chúng có thể được trả lại.
Nguồn
2016-05-10 19:29:54
Cảm ơn! Tôi đã làm việc đó. Giải mã JSON với Elm không phải là chính xác dễ dàng. –
Tôi sẽ không đi xa như để nói nó không phải là _easy_. Nó chỉ là không quen thuộc nếu bạn đã đến từ một nền tảng bắt buộc. Loại phân tích cú pháp này khá phổ biến trong các ngôn ngữ chức năng; nó được gọi là Parser Combinators. –