我有一个文本文件,其中每一行代表一个 JSON 对象。我正在用一个简单的for循环在 Go 中处理这个文件:scanner := bufio.NewScanner(file)for scanner.Scan() { jsonBytes = scanner.Bytes() var jsonObject interface{} err := json.Unmarshal(jsonBytes, &jsonObject) // do stuff with "jsonObject"...}if err := scanner.Err(); err != nil { log.Fatal(err)}当此代码到达包含特别大 JSON 字符串 (~67kb) 的一行时,我收到错误消息“bufio.Scanner:令牌太长”。有没有一种简单的方法可以增加可读的最大行大小NewScanner?或者,当需要读取过大NewScanner但通常已知不是不安全大小的行时,您是否可以完全采用另一种方法?
3 回答
蝴蝶刀刀
TA贡献1801条经验 获得超8个赞
你也可以这样做:
scanner := bufio.NewScanner(file)
buf := make([]byte, 0, 64*1024)
scanner.Buffer(buf, 1024*1024)
for scanner.Scan() {
// do your stuff
}
Scanner.Buffer() 的第二个参数设置最大令牌大小。在上面的示例中,只要没有任何行大于 1MB,您就可以扫描文件。
子衿沉夜
TA贡献1828条经验 获得超3个赞
您肯定不想首先逐行阅读。你为什么不这样做:
d := json.NewDecoder(file)
for {
var ob whateverType
err := d.Decode(&ob)
if err == io.EOF {
break
}
if err != nil {
log.Fatalf("Error decoding: %v", err)
}
// do stuff with "jsonObject"...
}
- 3 回答
- 0 关注
- 950 浏览
添加回答
举报
0/150
提交
取消