【问题标题】:Error during unmarshalling json array in golang [duplicate]在golang中解组json数组时出错[重复]
【发布时间】:2020-05-16 02:47:34
【问题描述】:

此代码示例尝试解析 json 数组:

package main

import (
    "fmt"
    "io/ioutil"
    "net/http"
    "encoding/json"
)

type MPkgInfo struct {
    name    string
    version string
}

type ClojarsPkg struct {
    jar_name   string
    group_name string
    version    string
}

type ClojarsSearchOp struct {
    results []ClojarsPkg
}

func findPackageClojars(name string) (*MPkgInfo, error) {
    s := "https://clojars.org/search?q=artifact-id:" + name + "&format=json"
    fmt.Println(s)
    res, err := http.Get(s)
    if err != nil {
        return nil, err
    }
    var resp ClojarsSearchOp
    bs, err := ioutil.ReadAll(res.Body)
    fmt.Println(string(bs))
    err = json.Unmarshal(bs, &resp)
    if err != nil {
        return nil, err
    }

    t := resp.results[0]
    return &MPkgInfo{
        name:    t.group_name + "/" + t.jar_name,
        version: t.version,
    }, nil
}

func main() {
    fmt.Println(findPackageClojars("parse_struct"))
}

但是 json 响应没有被正确解析。访问数组元素时出现索引超出范围错误。即使数组的长度为 1(如 println 所示)。

【问题讨论】:

标签: json go unmarshalling


【解决方案1】:

在解组时尝试err = json.Unmarshal(bs, &resp.results)。所以结果数组将存储在 resp.results 中。

【讨论】:

    【解决方案2】:

    您需要export您的字段,如果需要,您可以使用struct tags在json中指定实际的小写名称。

    type MPkgInfo struct {
        Name    string `json:"name"`
        Version string `json:"version"`
    }
    
    type ClojarsPkg struct {
        JarName   string `json:"jar_name"`
        GroupName string `json:"group_name"`
        Version   string `json:"version"`
    }
    
    type ClojarsSearchOp struct {
        Results []ClojarsPkg `json:"results"`
    }
    

    【讨论】:

      猜你喜欢
      • 2017-05-12
      • 1970-01-01
      • 2013-04-14
      • 2020-02-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 2021-11-04
      相关资源
      最近更新 更多