JSON 单值解析

在 python 中,您可以获取一个 json 对象并从中获取特定项,而无需声明结构体,保存到结构体然后像在 Go 中一样获取值。是否有包或更简单的方法可以在 Go 中存储来自 json 的特定值?


Python


res = res.json()

return res['results'][0] 


type Quotes struct {

AskPrice string `json:"ask_price"`

}


quote := new(Quotes)

errJson := json.Unmarshal(content, &quote)

if errJson != nil {

    return "nil", fmt.Errorf("cannot read json body: %v", errJson)

}


明月笑刀无情
浏览 133回答 2
2回答

交互式爱情

可以解码成a map[string]interface{},然后按键获取元素。data := make(map[string]interface{})err := json.Unmarshal(content, &data)if err != nil {    return nil, err}price, ok := data["ask_price"].(string); !ok {    // ask_price is not a string    return nil, errors.New("wrong type")}// Use price as you wish结构通常是首选,因为它们对类型更明确。您只需要在您关心的 JSON 中声明字段,并且您不需要像使用地图那样键入断言值(编码/json 隐式处理)。

红颜莎娜

尝试fastjson或jsonparser。jsonparser针对必须选择单个 JSON 字段fastjson的情况进行了优化,而针对必须选择多个不相关的 JSON 字段的情况进行了优化。下面是一个示例代码fastjson:var p fastjson.Parserv, err := p.Parse(content)if err != nil {    log.Fatal(err)}// obtain v["ask_price"] as float64price := v.GetFloat64("ask_price")// obtain v["results"][0] as generic JSON valueresult0 := v.Get("results", "0")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go