gpt4 book ai didi

json - 解码未被数组括号包围的 JSON 流?

转载 作者:IT王子 更新时间:2023-10-29 01:43:54 28 4
gpt4 key购买 nike

我正在尝试从文件中解码 JSON 流。该文件是换行符分隔的 JSON 对象。但是它没有用对象周围的数组括号格式化,所以我不知道如何使用 encoding/json 流解码器。

我收到错误 not at beginning of value 因为没有左括号。

package main

import (
"encoding/json"
"fmt"
"log"
"strings"
)

func main() {

// My data is missing opening and closing brackets around the jsonStream string.
// [
const jsonStream = `
{"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!"}
`
// ]
type Message struct {
Name, Text string
}
dec := json.NewDecoder(strings.NewReader(jsonStream))

// read open bracket -- this fails (no bracket)
t, err := dec.Token()
if err != nil {
log.Fatal(err)
}
fmt.Printf("%T: %v\n", t, t)

// while the array contains values
for dec.More() {
var m Message
// decode an array value (Message)
err := dec.Decode(&m)
if err != nil {
log.Fatal(err)
}

fmt.Printf("%v: %v\n", m.Name, m.Text)
}

// read closing bracket -- this also would fail (no bracket)
t, err = dec.Token()
if err != nil {
log.Fatal(err)
}
fmt.Printf("%T: %v\n", t, t)

}

删除 dec.Token() 错误检查也不起作用。我猜解析器不希望在看到数组左括号之前看到对象?

是否有一些解决方法?

最佳答案

一个建议是使用管道,并在 [] 之前添加和附加。

reader := strings.NewReader(jsonStream)

pr, pw := io.Pipe()

go func() {
pw.Write([]byte(`[`))
io.Copy(pw, reader)
pw.Write([]byte(`]`))
}()

dec := json.NewDecoder(pr)

您应该添加一些错误处理。

参见 https://play.golang.org/p/Oogu_NdAUyR对于整个事情。

关于json - 解码未被数组括号包围的 JSON 流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54266482/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com