我想知道除了流本身之外是否可以流式传输JSON并包含其他(同级)密钥?我想包含一些有关生成文件的额外数据。如下所示:
{
"info": {
"department": "a",
"id": "1",
},
"members": [
{ "name": "a", "age": "1" },
{ "name": "b", "age": "2" },
{ "name": "c", "age": "3" },
...stream
]
}
目前,我将JSON流式传输到平面文件,如下所示:
package main
import (
"encoding/json"
"os"
)
type Member struct {
Name string `json:"name"`
Age int `json:"age"`
}
func main() {
enc := json.NewEncoder(os.Stdout)
letters := []string{"a", "b", "c", "d", "e", "f"}
for i, letter := range letters {
key := Member{letter, i}
var err = enc.Encode(&key)
if err != nil {
// handle err
}
}
}
但如上所述,我想添加另一个键,例如" info"并在一个键中包含流,例如" members"
我可以想到问题的解决方案,它会将它们作为单独的文件存储在目录中,例如。
directory
├─ members.json
└─ info.json
但是可以添加其他(兄弟)键还是仅限于平面文件?
答案 0 :(得分:1)
类似的东西是可能的,但它并不是特别简单。我在PR中的一个开源项目中做了类似的事情,我尚未合并。但是你可以看到我的例子here。
我公开的接口是接收(...).reshape(X.shape)
并返回(可能被操纵)io.ReadCloser
。在内部,它使用io.ReadCloser
来解析JSON,可能会向流中添加新数据。我不确定json.Decoder
如何适合这种情况(如您的问题所述)。
为SO制作一个完整的工作示例对于SO答案来说将是一项相当大的任务,但我希望我提供的链接可以指向正确的方向。
在这种情况下,建议采用良好的单元测试和TDD方法!