首页 >后端开发 >Golang >如何在 Go 中解析多个 JSON 对象,尤其是当它们嵌套时?

如何在 Go 中解析多个 JSON 对象,尤其是当它们嵌套时?

DDD
DDD原创
2024-12-26 09:03:09796浏览

How Can I Parse Multiple JSON Objects in Go, Especially When They're Nested?

在 Go 中解析多个 JSON 对象:寻址嵌套对象

处理从服务器以嵌套对象形式返回的多个 JSON 对象时,标准encoding/json包可能会遇到困难。本文深入研究了使用 json.Decoder 有效处理此类场景的解决方案。

考虑以下示例:

{"something":"foo"}
{"something-else":"bar"}

使用以下代码解析此数据:

correct_format := strings.Replace(string(resp_body), "}{", "},{", -1)
json_output := "[" + correct_format + "]"

导致错误。

解决方案使用json.Decoder

为了解决这个问题,我们使用 json.Decoder。 json.Decoder 读取并解码类似 JSON 数据流,从输入中顺序解码各个 JSON 对象。

package main

import (
    "encoding/json"
    "fmt"
    "io"
    "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)
    }
}

在此解决方案中:

  • 初始化了 json.Decoder从包含 JSON 数据的字符串中读取。
  • 循环迭代流,将每个 JSON 对象解码为 Doc struct。
  • 解码继续,直到遇到 io.EOF(文件结束),表示流结束。
  • 打印每个成功解码的对象。

Playground 和结论

您可以在 Go Playground 上尝试此解决方案: https://play.golang.org/p/ANx8MoMC0yq

通过使用 json.Decoder,我们能够解析多个 JSON 对象,即使它们嵌套在更大的 JSON 结构中也是如此。

以上是如何在 Go 中解析多个 JSON 对象,尤其是当它们嵌套时?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn