使用多个json对象解组json文件(无效json文件)
我有一个json文件(file.json),包含以下内容: file.json:使用多个json对象解组json文件(无效json文件),json,go,unmarshalling,Json,Go,Unmarshalling,我有一个json文件(file.json),包含以下内容: file.json: {"job": "developer"} {"job": "taxi driver"} {"job": "police"} 该文件的内容与上述内容完全相同(不是有效的json文件) 我想在我的代码中使用数据,但我无法解组这个您拥有的不是单个JSON对象,而是一系列(不相关的)JSON对象。不能使
{"job": "developer"}
{"job": "taxi driver"}
{"job": "police"}
该文件的内容与上述内容完全相同(不是有效的json文件)
我想在我的代码中使用数据,但我无法解组这个您拥有的不是单个JSON对象,而是一系列(不相关的)JSON对象。不能使用来解组包含多个(独立)JSON值的内容 用于逐个解码源中的多个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"}`
哪些输出(在上尝试):
即使您的JSON对象占用源文件中的多行,或者同一行中有多个JSON对象,此解决方案仍然有效
请参阅相关内容:您可以逐行读取字符串并将其解组:
package main
import (
"bufio"
"encoding/json"
"fmt"
"strings"
)
type j struct {
Job string `json:"job"`
}
func main() {
payload := strings.NewReader(`{"job": "developer"}
{"job": "taxi driver"}
{"job": "police"}`)
fscanner := bufio.NewScanner(payload)
for fscanner.Scan() {
var job j
err := json.Unmarshal(fscanner.Bytes(), &job)
if err != nil {
fmt.Printf("%s", err)
continue
}
fmt.Printf("JOB %+v\n", job)
}
}
输出:
JOB {Job:developer}
JOB {Job:taxi driver}
JOB {Job:police}
这是脆弱的,因为它取决于两个事实:1)永远不会有格式不同的JSON对象,它会在任何空白块中包含换行符;2) JSON对象中包含的字符串文本中永远不会嵌入换行符。因此,我在这方面使用@icza。如果一行包含多个JSON对象,这也会中断。
JOB {Job:developer}
JOB {Job:taxi driver}
JOB {Job:police}