如何解码这个json字符串

如何解码这个json字符串,json,go,Json,Go,我的应用程序前端的json字符串是 {"ticker":"glencore","dated":"25/5/2121","resource_name":"testing","latlong":"","type":"","measured":{"0":{"

我的应用程序前端的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"`
    }

    resource := &HTTPResource{}
    if err := json.NewDecoder(r.Body).Decode(resource); err != nil {
        log.Println("unmarshaling error ", err)
    }
    fmt.Println("Decodedresource")
我一直得到下面的错误

2020/11/30 16:36:34 unmarshaling error  json: cannot unmarshal object into Go struct field HTTPResource.measured of type []main.HTTPMineral
Decodedresource
我肯定这一定是我忽略了什么,但我已经看了好几次了,我不明白我的结构是怎么不正确的


非常感谢帮助

测量的,
指示的
,等等。字段不是数组,而是像数组一样组织的JSON对象。使用

Measured map[string]HTTPMineral

然后使用
数据获取项目。测量的[“0”]
而不是
数据。测量的[0]

指示键、推断键和总计键不是数组类型,它们是关联数组(以键名作为索引)


测量地图[string]HTTPMineral
json:“测量”
指示地图[string]HTTPMineral
json:“指示”
推断地图[string]HTTPMineral
json:“推断”
Total地图[string]HTTPMineral
json:“总计”
当我这样尝试时,会出现解组错误json:无法将字符串解组到Go结构字段HTTPResource.measured中,类型为main.HTTPMineral。该错误表示您定义了
measured
HTTPMineral
,而不是map[string]HTTPMineral
  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")