我有一个像这样的json
[{"name":"Name1","age":20},{"name":"Name2","age":29}]
我想将其解码为地图,如下所示
map [map [“name”:“Name1”....],map [“name”:“Name2”,....]]
就我而言,我的逻辑看起来像这样
bt:= []byte(metadatas[0])
var dat interface{}
if err := json.Unmarshal(bt, dat); err != nil {
panic(err)
}
fmt.Println(dat)
作为我的回应
[map["name":"Name1" ....] ,map["name":"Name2",....]]
如何获取地图而不是
答案 0 :(得分:2)
用于解组的目标数据结构可以定义为val := []map[string]interface{}{}
:
package main
import (
"encoding/json"
"fmt"
)
func main() {
input := []byte(`[{"name":"Name1","age":20},{"name":"Name2","age":29}]`)
val := []map[string]interface{}{}
if err := json.Unmarshal(input, &val); err != nil {
panic(err)
}
fmt.Printf("%v\n", val)
}
这给了我们一张地图。如果要将这些映射放在另一个映射中,那么该映射的元素应该有一个键(就像它们在切片中的索引一样)。
答案 1 :(得分:1)
根据定义,map
是一种数据结构,它使用某些预定义的键来保持对特定值的引用。
在您的情况下,您正在拥有一个名为collection(地图数组)的数据结构。如果要将集合项保存为另一个映射值,最简单的方法是使用数组(集合)的索引作为键将集合转换为映射。
但是我不确定你能否在json.Unmarshal
期间直接进行,而不进行额外的转换
答案 2 :(得分:0)
我已经解决了这个问题,这是我的逻辑
MyConfig
作为回应,我得到了带对象的数组