我有一个JSON文件,其中包含如下数据
{
"id": "0001",
"type": "donut",
"name": "Cake",
"ppu": 0.55,
"batters": {
"batter": [{
"id": "1001",
"type": "Regular"
}, {
"id": "1002",
"type": "Chocolate"
}]
},
"topping": [{
"id": "5001",
"type": "None"
}, {
"id": "5002",
"type": "Glazed"
}, {
"id": "5005",
"type": "Sugar"
}, {
"id": "5007",
"type": "Powdered Sugar"
}]
}
我需要编辑'batter'数组中的'id'值。 假设我没有使用ant struct类型来解组。编辑后我需要再次将更新的JSON字符串写回文件。
答案 0 :(得分:0)
你可以在没有结构的情况下完成它,但这意味着在整个地方使用强制转换。这是一个working example:
package main
import (
"encoding/json"
"fmt"
)
func main() {
str := "{ \"id\": \"0001\", \"type\": \"donut\", \"name\": \"Cake\", \"ppu\": 0.55, \"batters\": { " +
"\"batter\": [{ \"id\": \"1001\", \"type\": \"Regular\" }, { \"id\": \"1002\", \"type\": " +
"\"Chocolate\" }] }, \"topping\": [{ \"id\": \"5001\", \"type\": \"None\" }, { \"id\": \"5002\", " +
"\"type\": \"Glazed\" }, { \"id\": \"5005\", \"type\": \"Sugar\" }, { \"id\": \"5007\", \"type\": " +
"\"Powdered Sugar\" }] }"
jsonMap := make(map[string]interface{})
err := json.Unmarshal([]byte(str), &jsonMap)
if err != nil {
panic(err)
}
batters := jsonMap["batters"].(map[string]interface{})["batter"]
for _, b := range(batters.([]interface{})) {
b.(map[string]interface{})["id"] = "other id"
}
str2, err := json.Marshal(jsonMap)
fmt.Println(string(str2))
}
我认为你最好使用结构。