Ran*_*j D 4 json encode decode elm
我有(String,Bool)元组需要在elm中编码为JSON数组.
下面的链接对于基本类型和其他列表,数组和对象很有用.但我需要编码tuple2.
参考:http://package.elm-lang.org/packages/elm-lang/core/4.0.3/Json-Encode#Value
我尝试了使用toString函数编码元组的不同方法.它没有给我JSON数组,而是产生如下的String "(\"r"\,False)".
JSON.Decoder期望输入参数解码如下面的代码片段.
decodeString (tuple2 (,) float float) "[3,4]"
Run Code Online (Sandbox Code Playgroud)
参考:http://package.elm-lang.org/packages/elm-lang/core/4.0.3/Json-Decode
问:当tuple2有解码功能时,为什么编码功能缺少它.
您可以构建一个通用的元组大小2编码器,如下所示:
import Json.Encode exposing (..)
tuple2Encoder : (a -> Value) -> (b -> Value) -> (a, b) -> Value
tuple2Encoder enc1 enc2 (val1, val2) =
list [ enc1 val1, enc2 val2 ]
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样调用它,传递你想要用于每个插槽的编码器类型:
tuple2Encoder string bool ("r", False)
Run Code Online (Sandbox Code Playgroud)
在 elm 0.19 https://package.elm-lang.org/packages/elm/json/latest/Json-Encode 中,通用元组 2 编码器将是
import Json.Encode exposing (list, Value)
tuple2Encoder : ( a -> Value ) -> ( b -> Value ) -> ( a, b ) -> Value
tuple2Encoder enc1 enc2 ( val1, val2 ) =
list identity [ enc1 val1, enc2 val2 ]
Run Code Online (Sandbox Code Playgroud)
用法:
encode 0 <| tuple2Encoder string int ("1",2)
Run Code Online (Sandbox Code Playgroud)