为了账号安全,请及时绑定邮箱和手机立即绑定

JSON 单值解析

JSON 单值解析

Go
明月笑刀无情 2021-12-20 15:18:34
在 python 中,您可以获取一个 json 对象并从中获取特定项,而无需声明结构体,保存到结构体然后像在 Go 中一样获取值。是否有包或更简单的方法可以在 Go 中存储来自 json 的特定值?Pythonres = 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)}
查看完整描述

2 回答

?
交互式爱情

TA贡献1712条经验 获得超3个赞

可以解码成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 隐式处理)。


查看完整回答
反对 回复 2021-12-20
?
红颜莎娜

TA贡献1842条经验 获得超12个赞

尝试fastjson或jsonparser。jsonparser针对必须选择单个 JSON 字段fastjson的情况进行了优化,而针对必须选择多个不相关的 JSON 字段的情况进行了优化。


下面是一个示例代码fastjson:


var p fastjson.Parser

v, err := p.Parse(content)

if err != nil {

    log.Fatal(err)

}


// obtain v["ask_price"] as float64

price := v.GetFloat64("ask_price")


// obtain v["results"][0] as generic JSON value

result0 := v.Get("results", "0")


查看完整回答
反对 回复 2021-12-20
  • 2 回答
  • 0 关注
  • 132 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信