json - 如何解码榆树中的空对象{}?
问题描述
我正在为 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.null
and JD.dict
,但我找不到解决方案。
解决方案
您可以通过将 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"
推荐阅读
- java - 开发 Cameo Systems Modeler 插件所需的 CLASSPATH?
- asp.net - 拒绝 IIS 中的特定文件扩展名类型
- postgresql - 使用数据库管理器无法进行数据库备份
- jquery - 如何在类中获取属性
- neo4j - Neo4j 计数大大增加了执行时间并耗尽了内存
- amazon-web-services - 为什么 dagger 在 AWS lambda 实施中被认为比 Guice 更好?
- javascript - 未处理的拒绝(错误):Reference.set 失败:第一个参数在属性“pictures.-LdqDWmOg30CiBelxyfR.image”中包含未定义
- html - 如何从网页进行 HTTP GET 和 POST 调用?
- kubernetes - 如何调查单个部署产生两个副本集的原因?
- python - 抓取时 Selenium 的奇怪行为