首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JSON.mapping宏如何处理联合类型的参数?

JSON.mapping宏如何处理联合类型的参数?
EN

Stack Overflow用户
提问于 2017-12-30 06:16:14
回答 1查看 121关注 0票数 4

JSON.mapping documentation中,明确声明了type属性的值应该是单一类型。但是,在实践中,联合类型也适用:

代码语言:javascript
复制
json1 = %q({"ok": true, "result": [{"type": "update", "id": 1}, {"type": "update", "id": 2}]})
json2 = %q({"ok": true, "result": {"type": "message"}})

class Response
  JSON.mapping({
    ok: Bool,
    result: Message | Array(Update)
  })
end

class Update
  JSON.mapping({
    type: String,
    id: Int32
  })
end

class Message
  JSON.mapping({
    type: String
  })
end

在两个JSON字符串上调用Response.from_json将会输出预期的结果。

代码语言:javascript
复制
Response.from_json json1

将输出:

代码语言:javascript
复制
#<Response:0x10d20ce20
  @ok=true,
  @result=
  [#<Update:0x10d20cc60 @id=1, @type="update">,
   #<Update:0x10d20cbe0 @id=2, @type="update">]>

代码语言:javascript
复制
Response.from_json json2

将输出:

代码语言:javascript
复制
#<Response:0x10d20c180
  @ok=true,
  @result=#<Message:0x10e241f80 @type="message">>

我的问题是它是如何工作的?它是预期行为还是随机的不可靠特性?

EN

回答 1

Stack Overflow用户

发布于 2017-12-30 06:52:49

这是意料之中的,文档不正确。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48029005

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档