我有一个这样的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"`
}但它并没有起作用。
发布于 2017-10-09 19:39:26
使用映射切片而不是字符串,因为您有字符串的键值对。
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上调用的函数。它假设每个map只包含两个字符串(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
}https://stackoverflow.com/questions/46645172
复制相似问题