arrays - 如何解析下面格式的json数组

标签 arrays json dictionary go

    {
    "machines": [{
        "name": "relay_1",
        "totalmem": "3G",
        "machinemem": "6G"
    }, {
        "name": "relay_2",
        "totalmem": "30G",
        "machinemem": "4G"
    }]
}

尝试使用以下代码进行解析
Run: func(cmd *cobra.Command, args []string) {
                fmt.Println("relay called")
                conf, _ = rootCmd.Flags().GetString("conf")
                if conf != "" {
                        fmt.Println("From Create Command : ", conf)
                }
                data, err := ioutil.ReadFile("file.txt") // data has type []byte
                if err != nil {
                        log.Fatal(err)
                }
                var result []map[string]interface{}
                json.Unmarshal(data, &result)
                relays := result["relays"].(map[string]interface{})
                for key, relay := range relays {
                        fmt.Println("name :", relay["name"],
                                "totalmem:", relay["totalmem"],
                                "relaymem:", relay["relaymem"])

                }
        },

但我收到如下错误,表明类型无效

cmd/create_relay.go:54:29: 无效类型断言:result["relays"].(map[string]) (左侧的非接口(interface)类型 map[string]interface {})

有人可以让我知道如何使用以下接口(interface)解析下面的 json

最佳答案

它与下面的代码一起工作。

type Relays struct {
    Relays []Relay `json:"relays"`
}

type Relay struct {
    Name       string `json:"name"`
    Totalmem   string `json:"totalmem"`
    Relaymem   string    `json:"relaymem"`
}

// relayCmd represents the relay command
var createrelayCmd = &cobra.Command{
        Use:   "relay",
        Short: "A brief description of your command",
        Long: `A longer description that spans multiple lines and likely contains examples
and usage of using your command. For example:

Cobra is a CLI library for Go that empowers applications.
This application is a tool to generate the needed files
to quickly create a Cobra application.`,
        Run: func(cmd *cobra.Command, args []string) {
                fmt.Println("relay called")
                conf, _ = rootCmd.Flags().GetString("conf")
                if conf != "" {
                        fmt.Println("From Create Command : ", conf)
                        jsonFile, err := os.Open(conf)
                        // if we os.Open returns an error then handle it
                        if err != nil {
                                fmt.Println(err)
                        }
                        fmt.Println("Successfully Opened users.json")
                        // defer the closing of our jsonFile so that we can parse it later on
                        defer jsonFile.Close()
                        data, err := ioutil.ReadAll(jsonFile) // data has type []byte
                        if err != nil {
                                log.Fatal(err)
                        }
                        var relays Relays
                        json.Unmarshal(data,&relays)
                        for i := 0; i < len(relays.Relays); i++ {
                                fmt.Println("User Name: " + relays.Relays[i].Name)
                                fmt.Println("User Totalmem: " + relays.Relays[i].Totalmem)
                                fmt.Println("User Relaymem: " + relays.Relays[i].Relaymem)
                        }
                }
        },
}

关于arrays - 如何解析下面格式的json数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58113576/

相关文章:

arrays - 修改结构中数组的最佳方法?

c++ - 递归地删除连续的重复项,给出无限递归

ios - Swift 中的数组扩展,使用 NSPropertyListReadOptions 从 plist 读取数组

javascript - React Native - JSON 本地存储

python - 我不确定如何让我的字典打印我想要的信息。 Python 3.1

python - python中的嵌套lambda表达式map和reduce

javascript - 如何从数组中获取匹配字符串的结果?

ios - 如何快速修复 HTTPBODY 的这些参数?

c# - 填充具有嵌套列表作为值的字典的正确语法是什么?

json - 我可以在 JSON Schema 中设置确切的值吗?