第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

更改文件的最后一個字符

更改文件的最后一個字符

Go
SMILET 2023-06-12 14:17:16
我想不斷地將 json 對象寫入文件。為了能夠閱讀它,我需要將它們包裝到一個數(shù)組中。我不想閱讀整個文件,只是為了簡單的附加。所以我現(xiàn)在在做什么:comma := []byte(", ")    file, err := os.OpenFile(erp.TransactionsPath, os.O_WRONLY|os.O_APPEND|os.O_CREATE, 0666)    if err != nil {        return err    }    transaction, err := json.Marshal(t)    if err != nil {        return err    }    transaction = append(transaction, comma...)    file.Write(transaction)但是對于這個實現(xiàn),我需要[]在閱讀之前手動(或通過一些腳本)添加范圍。如何在關(guān)閉每次寫入的范圍之前添加一個對象?
查看完整描述

1 回答

?
繁星coding

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.Filetojson.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]


查看完整回答
反對 回復(fù) 2023-06-12
  • 1 回答
  • 0 關(guān)注
  • 184 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號