如何从json文件中删除golang的一部分

fnx2tebb  于 2022-12-16  发布在  Go
关注(0)|答案(1)|浏览(193)

假设我有这样一个json文件,我想根据用户的选择删除窗口、图像或文本字段中的一个,并将其余内容打印到另一个文件中。

{
 "window": {
    "title": "Sample Konfabulator Widget",
    "name": "main_window",
    "width": 500,
    "height": 500
},
"image": { 
    "src": "Images/Sun.png",
    "name": "sun1",
    "hOffset": 250,
    "vOffset": 250,
    "alignment": "center"
},
"text": {
    "data": "Click Here",
    "size": 36,
    "style": "bold",
    "name": "text1",
    "hOffset": 250,
    "vOffset": 100,
    "alignment": "center",
    "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
}

例如,我想删除窗口字段我想将此内容写入不同的文件。
我卡住了,不知道怎么做。写另一个文件很容易,但我不知道如何删除一个文件
你能给我推荐一些有意义的方法吗?

{
  "image": { 
    "src": "Images/Sun.png",
    "name": "sun1",
    "hOffset": 250,
    "vOffset": 250,
    "alignment": "center"
},
"text": {
    "data": "Click Here",
    "size": 36,
    "style": "bold",
    "name": "text1",
    "hOffset": 250,
    "vOffset": 100,
    "alignment": "center",
    "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
}
}
hgc7kmma

hgc7kmma1#

根据我的理解,我们可以采用两种方法,第一种方法是将JSON数据解组为Go语言struct,第二种方法是将JSON数据解组为Go语言map,因为我不知道结构体,所以我们可以使用map。
您也可以出于学习的目的尝试第一种方法,但这只适用于正确的结构。

data := []byte(`{"window":{"title":"Sample Konfabulator Widget","name":"main_window","width":500,"height":500},"image":{"src":"Images/Sun.png","name":"sun1","hOffset":250,"vOffset":250,"alignment":"center"},"text":{"data":"Click Here","size":36,"style":"bold","name":"text1","hOffset":250,"vOffset":100,"alignment":"center","onMouseUp":"sun1.opacity = (sun1.opacity / 100) * 90;"}}`)

var v interface{}
err := json.Unmarshal(data, &v)
if err != nil {
    fmt.Println("error:", err)
}
m := v.(map[string]interface{})
// delete window
delete(m, "window")

然后可以再次封送为JSON并写入文件

b, err := json.Marshal(m)
if err != nil {
    fmt.Println("error:", err)
}
fmt.Println(string(b))

Go Playground

相关问题