【发布时间】:2015-07-10 18:50:17
【问题描述】:
我想将 JSON 流转换为对象流。使用换行符分隔的 JSON 很容易做到这一点。来自 Go 文档:https://golang.org/pkg/encoding/json/#Decoder.Buffered
但是,我需要从这样的 JSON 数组生成一个流:
[{"Name": "Ed", "Text": "Knock knock."},
{"Name": "Sam", "Text": "Who's there?"},
{"Name": "Ed", "Text": "Go fmt."},
{"Name": "Sam", "Text": "Go fmt who?"},
{"Name": "Ed", "Text": "Go fmt yourself!"}]
什么是执行此操作的高效方法?
我考虑过这种方法:
- 去掉外面的尖括号
- 当存在匹配的顶级花括号时,解组大括号(包括)之间的字符串以一次获取一个顶级对象。
我不想这样做,因为两次扫描字符串的每个部分会影响性能。
我能做的最好的选择是复制 Golang encoding/json 包中解码器的源代码并对其进行修改,以便它返回一个每次输出一个对象的 Reader。但对于这么简单的要求来说,这似乎工作量太大了。
有没有更好的方法来解码 JSON 数组的流?
编辑
我希望解析带有嵌套对象和任意结构的 JSON。
【问题讨论】:
-
是的,如果您知道格式是这样的,那么一次提取和解码对象的“预解析”对我来说听起来和任何方法一样好。这是一些可靠的示例文本。 :)
-
示例文本来自 Go 文档——实际上直到现在才阅读!