[英]JSON tag to decode into a struct in Golang
我有一個這樣的 JSON:
{
"add":[{"id": "1234ABCD"}, {"id": "5678EFGH"}]
}
我有一個這樣的結構:
type ExampleStruct struct {
Added []string
}
我想知道什么JSON標簽,我應該把我的結構,讓我做了JSON解碼(代碼這里沒有顯示),然后調用后exampleStruct := &ExampleStruct
其次exampleStruct.Added
,我怎么能得到["1234ABCD", "5678EFGH"]
?
我嘗試這樣做:
type ExampleStruct struct {
Added []string `json:"add"`
}
但它沒有用。
使用地圖切片而不是字符串,因為您有字符串的鍵值對。
type ExampleStruct struct {
Added []map[string]string `json:"add"`
}
這是一個完整的例子:
package main
import (
"bytes"
"encoding/json"
"fmt"
)
func main() {
const code = `{
"add":[{"id": "1234ABCD"}]
}`
type ExampleStruct struct {
Added []map[string]string `json:"add"`
}
var data ExampleStruct
json.NewDecoder(bytes.NewReader([]byte(code))).Decode(&data)
fmt.Println(data)
}
編輯
由於您只想擁有地圖的值,這里有一個完整的示例,其中Added
了一個可以在ExampleStruct
上調用的ExampleStruct
。 它假設每個映射只包含兩個字符串(id 和 value):
package main
import (
"bytes"
"encoding/json"
"fmt"
)
func main() {
const code = `{
"add":[{"id": "1234ABCD"}, {"id": "5678EFGH"}]
}`
var data ExampleStruct
json.NewDecoder(bytes.NewReader([]byte(code))).Decode(&data)
fmt.Println(data)
fmt.Println(data.Added())
}
type ExampleStruct struct {
Add []map[string]string `json:"add"`
}
func (e ExampleStruct) Added() []string {
values := make([]string, len(e.Add))
for i := range e.Add {
for _, v := range e.Add[i] {
values[i] = v
}
}
return values
}
您是否嘗試通過添加“id”來獲取其密鑰,就像這樣
類型 ExampleStruct struct { 添加 []string json:"add.id"
}
您需要將json
排列為可以直接訪問結構元素的方式(不要對其進行過度設計)。
package main
import (
"bytes"
"encoding/json"
"fmt"
)
type ExampleStruct struct {
Add []struct {
ID string `json:"id"`
} `json:"add"`
}
func main() {
const code = `{
"add":[{"id": "1234ABCD"}, {"id": "5678EFGH"}]
}`
var data ExampleStruct
json.NewDecoder(bytes.NewReader([]byte(code))).Decode(&data)
fmt.Println(data) //Get all ids: {[{1234ABCD} {5678EFGH}]}
fmt.Println(data.Add[0].ID) //Get 1st ID : 1234ABCD
fmt.Println(data.Add[1].ID) //Get 2nd ID ... and so on.: 5678EFGH
}
你可以在這里找到代碼https://play.golang.org/p/7tD4fLBewp 。
如果數組中有很多ids
,那么您還可以編寫一個函數來循環遍歷數組,即data.Add
並從中獲取 id。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.