Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
panic:json:无法将数组解组为main.Structure类型的Go值 你想完成什么?_Json_Go_Unmarshalling - Fatal编程技术网

panic:json:无法将数组解组为main.Structure类型的Go值 你想完成什么?

panic:json:无法将数组解组为main.Structure类型的Go值 你想完成什么?,json,go,unmarshalling,Json,Go,Unmarshalling,我正在尝试解析来自json api的数据 粘贴代码中显示问题的部分。 你期望结果是什么? 我希望代码返回接口对象的列表 你得到的实际结果是什么? 我收到一个错误:panic:json:无法将数组解组为main.Structure类型的Go值应用程序正在将json数组解组为结构。解组到切片: var decoded []interface{} err = json.Unmarshal(body, &decoded) 考虑对[]映射[string]字符串或标记为的[]标记进行解组 t

我正在尝试解析来自json api的数据

粘贴代码中显示问题的部分。 你期望结果是什么? 我希望代码返回接口对象的列表

你得到的实际结果是什么?
我收到一个错误:
panic:json:无法将数组解组为main.Structure类型的Go值

应用程序正在将json数组解组为结构。解组到切片:

 var decoded []interface{}
 err = json.Unmarshal(body, &decoded)
考虑对[]映射[string]字符串或标记为的[]标记进行解组

 type Tick struct {
     ID string
     Name string
     Symbol string
     Rank string
     ... and so on
}

我也有同样的问题。使用此代码:

type coinsData struct {
    Symbol string `json:"symbol"`
    Price  string `json:"price_usd"`
}

func main() {
resp, err := http.Get("https://api.coinmarketcap.com/v1/ticker/?limit=0")
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {
        log.Fatal(err)
    }

    var c []coinsData
    err = json.Unmarshal(body, &c)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("%v\n", c)
    }
您将得到以下结果:
[{BTC 7986.77}{ETH 455.857}{XRP 0.580848}…]

如果您能稍微解释一下您的代码,那就太好了。这个示例有效,而不是另一个。您能解释一下为什么这样做吗?“无法将数组解组为main.Structure类型的Go值”实际上问题很简单,我们正在尝试用结构类型(object)解析数据数组。即使我们尝试用字符串数组(“[]字符串”)类型的变量解组响应,解组也会死机。但任何结构“[]MyStruct”的数组都将进行解析,但如果键不匹配,则会给出零值。
type coinsData struct {
    Symbol string `json:"symbol"`
    Price  string `json:"price_usd"`
}

func main() {
resp, err := http.Get("https://api.coinmarketcap.com/v1/ticker/?limit=0")
    if err != nil {
        log.Fatal(err)
    }
    defer resp.Body.Close()

    body, err := ioutil.ReadAll(resp.Body)

    if err != nil {
        log.Fatal(err)
    }

    var c []coinsData
    err = json.Unmarshal(body, &c)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Printf("%v\n", c)
    }