我有一个像这样的JSON:
{
"add":[{"id": "1234ABCD"}, {"id": "5678EFGH"}]
}
我有一个像这样的结构:
type ExampleStruct struct {
Added []string
}
我想知道我应该在我的结构中添加什么JSON标记,以便在我执行JSON解码(代码未在此处显示)然后调用exampleStruct := &ExampleStruct
后跟exampleStruct.Added
时,我该怎样才能获得{ {1}}?
我试过这样做:
["1234ABCD", "5678EFGH"]
但它不起作用。
答案 0 :(得分:0)
您是否尝试通过添加'id'来获取其密钥,就像这样
type ExampleStruct struct {
添加了[]字符串json:"add.id"
}
答案 1 :(得分:0)
使用一片地图而不是字符串,因为你有字符串的键值对。
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
上调用的函数。它假定每个映射只包含两个字符串(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
}
答案 2 :(得分:0)
为了获得ids
的切片,请在结构上定义一个方法,GetIds()
例如:
package main
import (
"bytes"
"encoding/json"
"fmt"
)
type ExampleStruct struct {
Added []map[string]string `json:"add"`
}
func (ex *ExampleStruct) GetIds() []string {
res := make([]string, len(ex.Added))
for _, v := range ex.Added {
res = append(res, v["id"])
}
return res
}
func main() {
const code = `{
"add":[{"id": "1234ABCD"}, {"id": "5678EFGH"}]
}`
var data ExampleStruct
json.NewDecoder(bytes.NewReader([]byte(code))).Decode(&data)
ids := data.GetIds()
fmt.Printf("%s\n",ids)
}
=> [ 1234ABCD 5678EFGH]
答案 3 :(得分:0)
您需要安排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。