为了账号安全,请及时绑定邮箱和手机立即绑定

解码大流JSON

解码大流JSON

Go
富国沪深 2021-10-25 20:12:07
我有一个巨大的 JSON 数组存储在一个文件(“file.json”)中,我需要遍历该数组并对每个元素进行一些操作。err = json.Unmarshal(dat, &all_data)导致内存不足 - 我猜是因为它首先将所有内容加载到内存中。有没有办法按元素流式传输 JSON 元素?
查看完整描述

2 回答

?
一只甜甜圈

TA贡献1836条经验 获得超5个赞

因此,正如评论者所建议的,您可以使用“encoding/json”的流 API 一次读取一个字符串:


r := ... // get some io.Reader (e.g. open the big array file)

d := json.NewDecoder(r)

// read "["

d.Token()

// read strings one by one

for d.More() {

    s, _ := d.Token()

    // do something with s which is the newly read string

    fmt.Printf("read %q\n", s)

}

// (optionally) read "]"

d.Token()

请注意,为简单起见,我省略了需要实现的错误处理。


查看完整回答
反对 回复 2021-10-25
  • 2 回答
  • 0 关注
  • 168 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信