Changing values in json file with go

huangapple go评论85阅读模式
英文:

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:

huangapple
  • 本文由 发表于 2022年8月4日 04:43:47
  • 转载请务必保留本文链接:https://go.coder-hub.com/73227602.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定