1 回答

TA貢獻1797條經(jīng)驗 獲得超4個贊
您不需要將 JSON 對象包裝到數(shù)組中,您可以按原樣編寫它們。您可以用來json.Encoder
將它們寫入文件,也可以用來json.Decoder
讀取它們。Encoder.Encode()
并對Decoder.Decode()
流中的各個 JSON 值進行編碼和解碼。
為了證明它有效,請看這個簡單的例子:
const src = `{"id":"1"}{"id":"2"}{"id":"3"}`
dec := json.NewDecoder(strings.NewReader(src))
for {
? ? var m map[string]interface{}
? ? if err := dec.Decode(&m); err != nil {
? ? ? ? if err == io.EOF {
? ? ? ? ? ? break
? ? ? ? }
? ? ? ? panic(err)
? ? }
? ? fmt.Println("Read:", m)
}
它輸出(在Go Playground上試試):
Read:?map[id:1] Read:?map[id:2] Read:?map[id:3]
寫入文件/從文件讀取時,將os.File
tojson.NewEncoder()
和json.NewDecoder()
.
這是一個完整的演示,它創(chuàng)建一個臨時文件,用于json.Encoder
將 JSON 對象寫入其中,然后使用以下命令讀回它們json.Decoder
:
objs := []map[string]interface{}{
? ? map[string]interface{}{"id": "1"},
? ? map[string]interface{}{"id": "2"},
? ? map[string]interface{}{"id": "3"},
}
file, err := ioutil.TempFile("", "test.json")
if err != nil {
? ? panic(err)
}
// Writing to file:
enc := json.NewEncoder(file)
for _, obj := range objs {
? ? if err := enc.Encode(obj); err != nil {
? ? ? ? panic(err)
? ? }
}
// Debug: print file's content
fmt.Println("File content:")
if data, err := ioutil.ReadFile(file.Name()); err != nil {
? ? panic(err)
} else {
? ? fmt.Println(string(data))
}
// Reading from file:
if _, err := file.Seek(0, io.SeekStart); err != nil {
? ? panic(err)
}
dec := json.NewDecoder(file)
for {
? ? var obj map[string]interface{}
? ? if err := dec.Decode(&obj); err != nil {
? ? ? ? if err == io.EOF {
? ? ? ? ? ? break
? ? ? ? }
? ? ? ? panic(err)
? ? }
? ? fmt.Println("Read:", obj)
}
它輸出(在Go Playground上試試):
File content:
{"id":"1"}
{"id":"2"}
{"id":"3"}
Read: map[id:1]
Read: map[id:2]
Read: map[id:3]
- 1 回答
- 0 關(guān)注
- 184 瀏覽
添加回答
舉報