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

如何解码这个json字符串

如何解码这个json字符串

Go
眼眸繁星 2022-07-18 09:55:31
我的应用程序前端的 json 字符串是{"ticker":"glencore","dated":"25/5/2121","resource_name":"testing","latlong":"","type":"","measured":{"0":{"symbol":"4","grade":"4","grade_unit":"grams_per_ton","contained":"48000000","contained_unit":"t"},"1":{"symbol":"1","grade":"4","grade_unit":"grams_per_ton","contained":"48000000","contained_unit":"t"},"value":"5","unit":"tons"},"indicated":{"0":{"symbol":"4","grade":"1","grade_unit":"grams_per_ton","contained":"10000000","contained_unit":"t"},"1":{"symbol":"1","grade":"1","grade_unit":"grams_per_ton","contained":"10000000","contained_unit":"t"},"value":"4","unit":"tons"},"inferred":{"0":{"symbol":"4","grade":"2","grade_unit":"grams_per_ton","contained":"18000000","contained_unit":"t"},"1":{"symbol":"1","grade":"2","grade_unit":"grams_per_ton","contained":"18000000","contained_unit":"t"},"value":"3","unit":"tons"},"total":{"0":{"symbol":"4","grade":"3","grade_unit":"grams_per_ton","contained":"24000000","contained_unit":"t"},"1":{"symbol":"1","grade":"3","grade_unit":"grams_per_ton","contained":"24000000","contained_unit":"t"},"value":"2","unit":"tons"}}我要解码的golang代码是type HTTPMineral struct {        Symbol        string `json:"symbol"`        Grade         string `json:"grade"`        GradeUnit     string `json:"grade_unit"`        Contained     string `json:"contained"`        ContainedUnit string `json:"contained_unit"`    }    type HTTPResource struct {        Ticker        string        `json:"ticker"`        ResourceName  string        `json:"resource_name"`        DateOfRelease string        `json:"dated"`        Measured      []HTTPMineral `json:"measured"`        Indicated     []HTTPMineral `json:"indicated"`        Inferred      []HTTPMineral `json:"inferred"`        Total         []HTTPMineral `json:"total"`    }我不断收到以下错误2020/11/30 16:36:34 unmarshaling error  json: cannot unmarshal object into Go struct field HTTPResource.measured of type []main.HTTPMineralDecodedresource我确定它一定是我忽略的东西,但我已经看过好几次了,我不明白我的结构是如何不正确的。非常感谢帮助
查看完整描述

2 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

、等字段不是数组,它们是像数组一样组织的 JSON 对象measuredindicated利用

Measured map[string]HTTPMineral

然后通过使用data.Measured["0"]而不是获取项目data.Measured[0]


查看完整回答
反对 回复 2022-07-18
?
呼啦一阵风

TA贡献1802条经验 获得超6个赞

Key Indicated、Inferred 和 Total 不是数组类型,它们是关联数组(以键名作为索引)。


  type HTTPMineral struct {

            Symbol        string `json:"symbol"`

            Grade         string `json:"grade"`

            GradeUnit     string `json:"grade_unit"`

            Contained     string `json:"contained"`

            ContainedUnit string `json:"contained_unit"`

        }

        type SHttpMineral map[string]HTTPMineral

        type PHttpMineral struct {

            IHttpMineral

            Value string `json:"value"`

            Unit  string `json:"unit"`

        }

    

        type HTTPResource struct {

            Ticker        string       `json:"ticker"`

            ResourceName  string       `json:"resource_name"`

            DateOfRelease string       `json:"dated"`

            Measured      PHttpMineral `json:"measured"`

            Indicated     PHttpMineral `json:"indicated"`

            Inferred      PHttpMineral `json:"inferred"`

            Total         PHttpMineral `json:"total"`

        }

    

        resource := &HTTPResource{}

        if err := json.NewDecoder(r.Body).Decode(resource); err != nil {

        log.Println("unmarshaling error ", err)

    }

fmt.Println("Decodedresource")


查看完整回答
反对 回复 2022-07-18
  • 2 回答
  • 0 关注
  • 105 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号