Go 中解析多个 JSON 对象
处理 JSON 数据时,经常会遇到从服务器返回多个 JSON 对象的情况,而不是括在括号中的单个对象。解析此类数据存在其独特的挑战。
例如,如果您有以下格式的响应:
{"something":"foo"} {"something-else":"bar"}
您不能直接使用encoding/json包来解析此数据,因为它需要括号括住对象。
要解决此问题,您可以利用encoding/json 包中的 json.Decoder 类型。此类型允许您从字节流中解码 JSON 数据,使其适合处理多个 JSON 对象。
以下示例说明如何使用 json.Decoder 解析多个 JSON 对象:
package main import ( "encoding/json" "fmt" "log" "strings" ) var input = ` {"foo": "bar"} {"foo": "baz"} ` type Doc struct { Foo string } func main() { dec := json.NewDecoder(strings.NewReader(input)) for { var doc Doc err := dec.Decode(&doc) if err == io.EOF { // all done break } if err != nil { log.Fatal(err) } fmt.Printf("%+v\n", doc) } }
在此示例中,我们使用 strings.NewReader 从输入字符串创建字节流。然后我们创建一个 json.Decoder 来解码该流。
在一个循环中,我们重复调用 dec.Decode(&doc) 将每个 JSON 对象解码为我们的 Doc 结构。循环一直持续到流结束,此时 err 被设置为 io.EOF。
通过利用 json.Decoder,我们可以有效地解析多个 JSON 对象,即使它们没有括在括号中,从而允许我们可以处理各种 JSON 数据格式。
以上是如何在Go中解析不带括号的多个JSON对象?的详细内容。更多信息请关注PHP中文网其他相关文章!