如何将JSON数组解码为Elm自定义Payload类型构成的List集合
实现方案
1. 补全单个Payload类型解码器
你已经写好了基本的分支逻辑框架,只需要在匹配到对应类型时,把P1/P2的解码器映射为Payload的构造器即可,同时补充未知类型的错误处理逻辑:
decodePayload_ : String -> Jd.Decoder Payload decodePayload_ ptype = case ptype of "P1" -> Jd.map PayloadP1 decodeP1 "P2" -> Jd.map PayloadP2 decodeP2 other -> Jd.fail <| "未知的Payload类型: " ++ other
注意当前代码存在命名冲突:你定义的P2类型字段是
s1/s2,但解码器和JSON示例里用的字段名是p1/p2,需要统一两边的命名否则会解码失败。如果以JSON结构为准,可以把P2的定义调整为:type alias P2 = { id : Int , p1 : String , p2 : String }
2. 实现JSON数组解码器
要将整个JSON数组解码为PayloadQueue类型,直接用Json.Decode.list包装单条Payload的解码器即可:
decodePayloadQueue : Jd.Decoder PayloadQueue decodePayloadQueue = Jd.list decodePayload
3. 示例调用
要解析你给出的json_str,调用方式如下:
import Json.Decode as Jd parseResult : Result Jd.Error PayloadQueue parseResult = Jd.decodeString decodePayloadQueue json_str
内容的提问来源于stack exchange,提问作者az5112
相关产品推荐
相关产品推荐

