【问题标题】:How do I represent variants (sum-types) in JSON?如何在 JSON 中表示变体(总和类型)?
【发布时间】:2014-03-03 18:05:09
【问题描述】:

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

【问题讨论】:

    标签: json functional-programming variant


    【解决方案1】:

    以下面的变体类型为例。

    data Tree = Empty
              | Leaf Int
              | Node Tree Tree
    

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

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

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

    【讨论】:

    • @Timothy:编辑澄清了。看起来您的意思是 Leaf -&gt; 和这些部分是 JSON 的 part。但在编辑之后,它看起来更像是一个两列布局(您可能想更进一步明确这一点)。
    • 漂亮的 ASCII 图形 :)
    【解决方案2】:

    也许使用带有valuetag 属性的对象表示法?例如:

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

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

    【讨论】:

      猜你喜欢
      • 2016-05-28
      • 1970-01-01
      • 1970-01-01
      • 2020-04-18
      • 1970-01-01
      • 2022-10-12
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多