如何在Go中解码json

时间:2017-07-26 07:32:58

标签: json dictionary go

我有一个像这样的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",....]]

如何获取地图而不是

3 个答案:

答案 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)
}

Go Playgroung

这给了我们一张地图。如果要将这些映射放在另一个映射中,那么该映射的元素应该有一个键(就像它们在切片中的索引一样)。

答案 1 :(得分:1)

根据定义,map是一种数据结构,它使用某些预定义的键来保持对特定值的引用。

在您的情况下,您正在拥有一个名为collection(地图数组)的数据结构。如果要将集合项保存为另一个映射值,最简单的方法是使用数组(集合)的索引作为键将集合转换为映射。

但是我不确定你能否在json.Unmarshal期间直接进行,而不进行额外的转换

答案 2 :(得分:0)

我已经解决了这个问题,这是我的逻辑

MyConfig

作为回应,我得到了带对象的数组