一尘不染

在Go中解析多个JSON对象

go

使用该encoding/json包可以很容易地解析如下对象。

[ 
    {"something":"foo"},
    {"something-else":"bar"}
]

我面临的问题是从服务器返回多个命令,如下所示:

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

无法使用以下代码进行解析。

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

我正在尝试解析Common Crawl数据(请参阅示例)。

我怎样才能做到这一点?


阅读 474

收藏
2020-07-02

共1个答案

一尘不染

假设您的输入确实是一系列有效的JSON文档,请使用json.Decoder对其进行解码:

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)
    }
}

游乐场:https//play.golang.org/p/ANx8MoMC0yq

如果您的输入确实是您在问题中显示的内容,则不是JSON,您必须编写自己的解析器。

2020-07-02