Golang中如何正确将字符串映射追加到JSON
Golang中如何正确将字符串映射追加到JSON 大家好
我有配置
{
"sites": [
{
"http://site1.info": 0
},
{
"https://site2.info": 0
},
{
"https://site3.info": 0
}
],
"time": 5
}
和结构体
SiteList struct {
Sites []map[string]int `json:"sites,omitempty"`
Time int `json:"time,omitempty"`
}
如何向我的JSON文件中追加内容或删除一个站点和整数值?
更多关于Golang中如何正确将字符串映射追加到JSON的实战教程也可以访问 https://www.itying.com/category-94-b0.html
3 回复
请注意 Sites 是一个由 map 组成的切片。因此
- 创建一个新的 map
var m = make(map[string]int)
m["https://3.info:"] = 3
- 将此 map 添加到切片中
siteList.Sites = append(siteList.Sites, m)
- 要删除某个项目,只需按照从切片中移除元素的方式进行操作
func RemoveIndex(s []map[string]int, index int) []int {
return append(s[:index], s[index+1:]...)
}
- 要更新文件,只需将新的 json 结构写入其中
file, _ := json.Marshal(siteList)
_ = ioutil.WriteFile("data.json", file, 0644)
在Go语言中,你可以通过以下方式操作JSON数据中的映射数组:
追加新站点
package main
import (
"encoding/json"
"fmt"
"os"
)
type SiteList struct {
Sites []map[string]int `json:"sites,omitempty"`
Time int `json:"time,omitempty"`
}
func main() {
// 读取现有JSON
data := []byte(`{
"sites": [
{"http://site1.info": 0},
{"https://site2.info": 0},
{"https://site3.info": 0}
],
"time": 5
}`)
var siteList SiteList
json.Unmarshal(data, &siteList)
// 追加新站点
newSite := map[string]int{"https://site4.info": 1}
siteList.Sites = append(siteList.Sites, newSite)
// 序列化回JSON
updatedJSON, _ := json.MarshalIndent(siteList, "", " ")
fmt.Println(string(updatedJSON))
}
删除特定站点
// 删除指定URL的站点
func removeSite(siteList *SiteList, urlToRemove string) {
for i, site := range siteList.Sites {
for key := range site {
if key == urlToRemove {
siteList.Sites = append(siteList.Sites[:i], siteList.Sites[i+1:]...)
return
}
}
}
}
// 使用示例
removeSite(&siteList, "https://site2.info")
完整文件操作示例
func updateJSONFile(filename string) error {
// 读取文件
data, err := os.ReadFile(filename)
if err != nil {
return err
}
var siteList SiteList
json.Unmarshal(data, &siteList)
// 追加操作
siteList.Sites = append(siteList.Sites, map[string]int{"https://newsite.com": 2})
// 删除操作
removeSite(&siteList, "http://site1.info")
// 写回文件
updatedData, _ := json.MarshalIndent(siteList, "", " ")
return os.WriteFile(filename, updatedData, 0644)
}
更高效的删除方法(处理多个匹配)
func removeSites(siteList *SiteList, urlsToRemove []string) {
newSites := make([]map[string]int, 0)
for _, site := range siteList.Sites {
shouldRemove := false
for key := range site {
for _, urlToRemove := range urlsToRemove {
if key == urlToRemove {
shouldRemove = true
break
}
}
}
if !shouldRemove {
newSites = append(newSites, site)
}
}
siteList.Sites = newSites
}
这些操作会保持JSON结构不变,同时提供对站点数组的增删功能。

