doushi8187 2018-07-12 03:17
浏览 59
已采纳

如何在对象具有字符串键的Golang中解组JSON

I have some JSON that looks like this:

{
  "ABC": {"symbol": "abc", "open": 42},
  "DEF": {"symbol": "abc", "open": 42},
  "GHI": {"symbol": "abc", "open": 42}
}

And I don't need the ABC/DEF/GHI part, only the part on the right. The values of ABC, DEF, and GHI are of type entity.Day in my code, which looks something like this:

type Day struct {
    Symbol           string    `json:"symbol"  sql:"symbol"`
    Date             time.Time `json:"date"  sql:"date"`
    OpenP            float64   `json:"open"  sql:"open"`
    HighP            float64   `json:"high"  sql:"high"`
    LowP             float64   `json:"low"  sql:"low"`
    CloseP           float64   `json:"close"  sql:"close"`
    VolumeP          float64   `json:"volume"  sql:"volume"`
    Label            string    `json:"label" sql:"-"`
    ChangeOverTime   float64   `json:"changeOverTime"  sql:"change_over_time"`
    UnadjustedVolume float64   `json:"unadjustedVolume"  sql:"unadjusted_volume"`
    Change           float64   `json:"change"  sql:"change"`
    ChangePercent    float64   `json:"changePercent"  sql:"change_percent"`
    VWAP             float64   `json:"vwap"  sql:"vwap"`
}

There are other endpoints that produce entity.Days, however this is the only one that's structured like this. How can I unmarshal the JSON into, ideally, an array of entity.Days?

My first thought was to make an intermediate data structure:

type previous struct {
    tckrs map[string]entity.Day
}

p := previous{tckrs: make(map[string]entity.Day)}
json.Unmarshal(res, &p)

That code produces an empty struct and json.Unmarshal returns a nil error. Can you help me?

PS - I searched around quite a bit and I found similar answers and lots of other people trying the map approach, although that did not work for me.

  • 写回答

1条回答 默认 最新

  • dpruwm6206 2018-07-12 03:25
    关注

    The type previous you defined would require your JSON to represent an object with one top level field containing the map.

    Since your JSON models a map directly, you can use a map to unmarshal it.

    Try just:

    p := make(map[string]Day)
    json.Unmarshal(res, &p)
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 PADS Logic 原理图
  • ¥15 PADS Logic 图标
  • ¥15 电脑和power bi环境都是英文如何将日期层次结构转换成英文
  • ¥20 气象站点数据求取中~
  • ¥15 如何获取APP内弹出的网址链接
  • ¥15 wifi 图标不见了 不知道怎么办 上不了网 变成小地球了
  • ¥50 STM32单片机传感器读取错误
  • ¥15 (关键词-阻抗匹配,HFSS,RFID标签天线)
  • ¥15 机器人轨迹规划相关问题
  • ¥15 word样式右侧翻页键消失