首页 > 解决方案 > 如何解码榆树中的空对象{}?

问题描述

我正在为 elm (0.19.1) 编写一个 JSON 解码器。我传入的 jsonValue是一个空对象{}。如何将该值解码为类型(此处NoPayload)?

我尝试在解码器的帮助下对其进行JD.string解码:

JD.string
    |> JD.andThen
        (\str ->
            if str == "{}" then
                JD.succeed NoPayload

            else
                JD.fail "Failed to decode non-empty payload to NoPayload decoder"
        )

但这导致了一个错误:

Problem with the given value:

    {}

    Expecting a STRING

或者,我正在试验JD.nulland JD.dict,但我找不到解决方案。

标签: jsonelm

解决方案


您可以通过将 JSON 对象转换为字典来验证空对象dict,然后验证字典中是否没有键:

import Dict
import Json.Decode as JD exposing (Decoder)

emptyJsonDecoder : Decoder Payload
emptyJsonDecoder =
    JD.dict JD.int
        |> JD.andThen
            (\entries ->
                case Dict.size entries of
                    0 ->
                        JD.succeed NoPayload

                    _ ->
                        JD.fail "Expected empty JSON object"
            )

对于验证:

JD.decodeString emptyJsonDecoder "{}"          == Ok NoPayload
JD.decodeString emptyJsonDecoder "{\"a\":123}" == Err "Expected empty JSON object"

推荐阅读