在這個 json 中,我想在 golang 中將鍵的值從 int 更改為 string。
輸入:
{ "id": 12345, "wrapper": 898984, "sections": { "main": { "type": 76899 } }, "order": [82322] }
輸出:
{“id”:“12345”,“wrapper”:“898984”,“sections”:{“main”:{“type”:“76899”}},“order”:[“82322”]}
uj5u.com熱心網友回復:
最直接的方法是為兩個 json 創建結構。然后創建將一個轉換為另一個的函式:
package main
import (
"encoding/json"
"fmt"
"strconv"
)
var input = `{ "id": 12345, "wrapper": 898984, "sections": { "main": { "type": 76899 } }, "order": [ 82322 ] }`
type DataWithInts struct {
ID int `json:"id"`
Wrapper int `json:"wrapper"`
Sections struct {
Main struct {
Type int `json:"type"`
} `json:"main"`
} `json:"sections"`
Order []int `json:"order"`
}
type MainStringsData struct {
Type string `json:"type"`
}
type SectionsStringsData struct {
Main MainStringsData `json:"main"`
}
type DataWithStrings struct {
ID string `json:"id"`
Wrapper string `json:"wrapper"`
Sections SectionsStringsData `json:"sections"`
Order []string `json:"order"`
}
func GetDataWithStrings(data *DataWithInts) *DataWithStrings {
var order []string
for _, v := range data.Order {
order = append(order, strconv.Itoa(v))
}
return &DataWithStrings{
ID: strconv.Itoa(data.ID),
Wrapper: strconv.Itoa(data.Wrapper),
Sections: SectionsStringsData{
Main: MainStringsData{
Type: strconv.Itoa(data.Sections.Main.Type),
},
},
Order: order,
}
}
func main() {
var dataInts DataWithInts
err := json.Unmarshal([]byte(input), &dataInts)
if err != nil {
panic(err)
}
dataStrings := GetDataWithStrings(&dataInts)
jsonData, err := json.Marshal(dataStrings)
if err != nil {
panic(err)
}
fmt.Println(string(jsonData))
}
更通用的方法可以使用直接 json 決議或反射包。
PS 要創建結構,可以使用以下站點:https ://mholt.github.io/json-to-go/
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/526305.html
標籤:去
