You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 21:15:01