Go 中如何快速将字符串数组转为结构体?

网上获取的数据类型是这个类型 [][]string ,我想要进行处理,第一个是时间格式,后面都是浮点数,所以我新建一个结构体,怎么快速将这种字符串数组快速转变为对应的和结构体呢?
元数据类型:

[
    [
        "2019-03-20T16:00:00.000Z",
        "3.721",
        "3.743",
        "3.677",
        "3.708",
        "8422410",
        "22698348.04828491"
    ],
    [
        "2019-03-19T16:00:00.000Z",
        "3.731",
        "3.799",
        "3.494",
        "3.72",
        "24912403",
        "67632347.24399722"
    ],
]

期望类型:

type bar struct {
    timestamp time.Time
    open      float64
    high      float64
    low       float64
    close     float64
    volume    float64
    cVolume   float64
}
阅读 10.3k
4 个回答

自己写个解析好了,没啥好办法,不是key:value的json格式。

package main

import (
    "fmt"
    "strconv"
    "time"
)

type bar struct {
    timestamp time.Time
    open      float64
    high      float64
    low       float64
    close     float64
    volume    float64
    cVolume   float64
}

func newBar(s []string) *bar {
    b := &bar{}

    if len(s) > 0 {
        b.timestamp, _ = time.Parse(time.RFC3339, s[0])
        fmt.Println(b.timestamp)
    }

    if len(s) > 1 {
        b.open, _ = strconv.ParseFloat(s[1], 64)
    }

    if len(s) > 2 {
        b.high, _ = strconv.ParseFloat(s[2], 64)
    }

    if len(s) > 3 {
        b.low, _ = strconv.ParseFloat(s[3], 64)
    }

    if len(s) > 4 {
        b.close, _ = strconv.ParseFloat(s[4], 64)
    }

    if len(s) > 5 {
        b.volume, _ = strconv.ParseFloat(s[5], 64)
    }

    if len(s) > 6 {
        b.cVolume, _ = strconv.ParseFloat(s[6], 64)
    }

    return b
}

func main() {
    s := [][]string{
        []string{
            "2019-03-20T16:00:00.000Z",
            "3.721",
            "3.743",
            "3.677",
            "3.708",
            "8422410",
            "22698348.04828491",
        },
        []string{
            "2019-03-19T16:00:00.000Z",
            "3.731",
            "3.799",
            "3.494",
            "3.72",
            "24912403",
            "67632347.24399722",
        },
    }

    var bs []*bar
    for _, data := range s {
        bs = append(bs, newBar(data))
    }

    fmt.Printf("%v\n", bs)
}

你这就是个二维码数组的JSON,直接解析为JSON,然后遍历就可以了,反正索引和结构体对应

首先设计一个结构体对应二维数组中的元素,然后遍历解析到结构体中就行了。

写个回调函数...

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏