如何在JSON中表示变体(sum-types)?

时间:2014-03-03 18:05:09

标签: json functional-programming variant

代数数据类型是准确描述数据的便捷方式。 JSON中的产品类型没有问题。但是,不清楚sum-type是什么,所以如何在JSON中表示变体类型

2 个答案:

答案 0 :(得分:3)

也许使用带有valuetag属性的对象表示法? E.g:

{
    "someVariant": {
        "value": 25,
        "tag":   "currentFormOfTheVariant"
    }
}

对象和特殊格式的字符串基本上是您在JSON中自描述数据类型的唯一真正选项。

答案 1 :(得分:3)

以下面的变体类型为例。

data Tree = Empty
          | Leaf Int
          | Node Tree Tree

在JSON中,您可以使用以下三种形式来指定三种变体。

Variant | JSON
--------+---------------
Empty   | null
--------+---------------
Leaf    | {
        |   "leaf": 7
        | }
--------+---------------
Node    | {
        |   "node": [
        |     <tree>,
        |     <tree>
        |   ]
        | }

基本上,使用具有单个键值对的JSON对象,其中键是选定的变体。