如何解码这个json字符串

我的应用程序前端的 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.HTTPMineral

Decodedresource

我确定它一定是我忽略的东西,但我已经看过好几次了,我不明白我的结构是如何不正确的。


非常感谢帮助


眼眸繁星
浏览 106回答 2
2回答

炎炎设计

、等字段不是数组,它们是像数组一样组织的 JSON 对象measured。indicated利用Measured map[string]HTTPMineral然后通过使用data.Measured["0"]而不是获取项目data.Measured[0]

呼啦一阵风

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")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go