英文:
Changing values in json file with go
问题
我有一个小的 JSON 文件,我想偶尔修改它的值。
我成功使用 Unmarshal
打开了文件,但是我不知道如何修改它的值。
我看到可以使用 Marshal
来通过 Data
结构体改变 JSON 文件,但是我不想每次都重写整个文件,只是为了修改一个值。有没有一种方法可以通过变量来修改,还是必须使用 Marshal
函数?
英文:
I've got a small json file
{
"first": "",
"second": ""
}
and I want to ocasionally modify its values.
I managed to open the file using Unmarshal
but I don't know how to change its values.
package main
import (
"encoding/json"
"io/ioutil"
)
type Data struct {
First string `json:"first"`
Second string `json:"second"`
}
func main() {
//read json file with io/ioutil
file, _ := ioutil.ReadFile("temp.json")
var data Data
json.Unmarshal(file, &data)
}
I saw that you can Marshal
and it should change the json file by the Data
struct but I don't want to rewrite the file everytime just to modify a single value. Is there a way to change by variable or I do have to use the Marshal
function?
答案1
得分: 1
你需要将整个文件加载到内存中,进行更改后再写回文件。为了更方便地操作JSON结构化对象,可以添加编码和解码步骤:
1. JSON文件 (A) ----- 读取 ----------> 文件内容 (B, 文本)
2. 文件内容 (B) ----- JSON解码 -----> JSON对象 (C, 结构化)
3. JSON对象 (C) ----- 修改值 --------> JSON对象 (D)
4. JSON对象 (D) ----- JSON编码 -----> 新内容 (E)
5. 新内容 (E) ----- 写入 ----------> JSON文件 (F)
如果你问的是“是否可以部分更新文件本身”,这可能是一个重复的问题,可以参考https://stackoverflow.com/q/52322533/1592264。
在Go语言中,你可以使用encoding/json
包提供的以下API:
英文:
You have to load the entire file into memory, make changes and write back to the file. In order to manipulate JSON structured objects more easily, add your encode & decode steps:
1. JSON file (A) ----- read -----------> file content (B, text)
2. file content (B) ----- json decode ----> json object (C, structured)
3. json object (C) ----- change value ---> json object (D)
4. json object (D) ----- json encode ----> new content (E)
5. new content (E) ----- write ----------> JSON file (F)
If you are asking about "if it possible to partially update the file itself", it can be a duplicate of https://stackoverflow.com/q/52322533/1592264.
The APIs you can use in Go that the package encoding/json provided are:
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论