亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何解析下面格式的json數組

如何解析下面格式的json數組

Go
白豬掌柜的 2023-07-26 16:45:19
 {    "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:無效類型斷言:結果["relays"].(map[string])(左側為非接口類型map[string]interface {})有人可以讓我知道如何使用下面的接口解析下面的 json數組json字典去
查看完整描述

2 回答

?
qq_花開花謝_0

TA貢獻1835條經驗 獲得超7個贊

它與下面的代碼一起工作。


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)

                        }

                }

        },

}


查看完整回答
反對 回復 2023-07-26
?
幕布斯7119047

TA貢獻1794條經驗 獲得超8個贊

result在您的代碼中是一個地圖數組,您正在使用result["relays"]它是無效的。


你的代碼應該是這樣的:


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"].([]interface{})

            for _, relay := range relays {

                    relayM := relay.(map[string]interface{})

                    fmt.Println("name :", relayM["name"].(string),

                            "totalmem:", relayM["totalmem"].(string),

                            "relaymem:", relayM["relaymem"].(string))


            }

    },


查看完整回答
反對 回復 2023-07-26
  • 2 回答
  • 0 關注
  • 162 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號