首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Go 语言中的动态 JSON

首发于 https://studygolang.com/articles/12172

Go 语言是静态类型语言,虽然它也可以表现出动态类型,但是使用一个嵌套的 在那里乱叫会让代码变得特别丑。通过掌握语言的静态特性,我们可以做的更好。

通过同一通道交换多种信息的时候,我们经常需要 JSON 具有动态的,或者更合适的参数内容。首先,让我们来讨论一下消息封装(message envelopes),JSON 在这里看起来就像这样:

通过不同的消息类型生成 JSON

通过 ,我们可以很容易的将数据结构编码成为独立封装的,具有多种类型的消息体的 JSON 数据。为了生成下面的 JSON :

我们可以使用这些 Go 类型:

输出的结果是:

这些并没有什么特殊的。

解析 JSON 到动态类型

如果你想将上面的 JSON 对象解析成为一个 类型的对象,最终你会将 字段解析成为一个 。 这种方式不是很好用,会使你后悔你的选择。

输出:

明确的解析方式

就像前面说的,我推荐修改 类型,就像这样:

非常有用,它可以让你延迟解析相应的 JSON 数据。它会将未处理的数据存储为 。

这种方式可以让你显式控制 的解析。从而延迟到获取到 的值之后,依据 的值进行解析。这种方式不好的地方在于你需要先明确解析 ,或者你需要单独分为 和 两种类型,其中 仍然有 。

结合 和 的优点

那么如何将上述两者好的一面结合起来呢?通过在 字段中放入 !

输出:

如何把所有数据都放在最外层(顶层)

虽然我极其推荐你将动态可变的部分放在一个单独的 key 下面,但是有时你可能需要处理一些预先存在的数据,它们并没有用这样的方式进行格式化。

如果可以的话,请使用文章前面提到的风格。

我们可以通过解析两次数据的方式来解决。

via: http://eagain.net/articles/go-dynamic-json/

作者:Tommi Virtanen

译者:jliu666

校对:polaris1119

本文由 GCTT 原创编译,Go 中文网 荣誉推出

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180601G0JFU100?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券