此代码示例尝试解析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所示)。
您需要导出字段,并且可以在必要时使用struct标记在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"`
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句