我有一个这样的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
}发布于 2017-10-09 19:22:50
您是否尝试过通过添加'id‘来获取它的密钥,如下所示
类型添加结构{ ExampleStruct []string json:"add.id" }
发布于 2017-10-10 01:27:16
您需要以这样的方式安排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,并从中获取If。
https://stackoverflow.com/questions/46645172
复制相似问题