首页 > 解决方案 > 解组具有多个 json 对象的 json 文件(无效的 json 文件)

问题描述

我有一个包含以下内容的 json 文件(file.json):

文件.json:

{"job": "developer"}
{"job": "taxi driver"}
{"job": "police"}

文件内容如上(不是有效的json文件)

我想在我的代码中使用数据,但我不能解组这个

标签: jsongounmarshalling

解决方案


您拥有的不是单个 JSON 对象,而是一系列(不相关的)JSON 对象。您不能json.Unmarshal()用来解组包含多个(独立)JSON 值的内容。

用于json.Decoder从源中一对一解码多个 JSON 值(对象)。

例如:

func main() {
    f := strings.NewReader(file)
    dec := json.NewDecoder(f)

    for {
        var job struct {
            Job string `json:"job"`
        }
        if err := dec.Decode(&job); err != nil {
            if err == io.EOF {
                break
            }
            panic(err)
        }
        fmt.Printf("Decoded: %+v\n", job)
    }
}

const file = `{"job": "developer"}
{"job": "taxi driver"}
{"job": "police"}`

哪些输出(在Go Playground上尝试):

Decoded: {Job:developer}
Decoded: {Job:taxi driver}
Decoded: {Job:police}

即使您的 JSON 对象在源文件中占用多行,或者同一行中有多个 JSON 对象,此解决方案也有效。

请参阅相关:我以以下方式获取 exec.Command 输出的输出。从那个输出我想得到我需要的数据


推荐阅读