【问题标题】:Go : format struct for javascript (json without keys)Go:javascript的格式结构(没有键的json)
【发布时间】:2016-02-15 08:29:41
【问题描述】:

我必须为图表形成一片结构。编组它,然后返回到前端小部件。 小部件正在等待这样的格式:

[["1455523840380",1],["1455523840383",2],["1455523840384",3]]

但我的数据是这样的:

[{"Time":1.45552462158e+12,"Value":1},{"Time":1.45552462158e+12,"Value2},{"Time":1.45552462158e+12,"Value3}]

我即将进入切片的结构是这样的:

type ChartElement struct {
    Time  int `json:""`
    Value int `json:""`
}

我现在有两个主要问题:

  1. 如何使 json 没有键,但只有 2 个带逗号的值 它们之间?
  2. 如何将日期或时间转换为 javascript 毫秒数正确吗?

【问题讨论】:

    标签: javascript json time go struct


    【解决方案1】:

    你想要的输出格式:

    [["1455523840380",1],["1455523840383",2],["1455523840384",3]]
    

    在 JSON 中它不是一个结构数组,而是一个数组数组。

    由于“内部”数组有多种类型(字符串和数字),您可以这样建模:

    type ChartElement []interface{}
    

    你可以像这样填充它:

    s := []ChartElement{{"1455523840380", 1}, {"1455523840383", 2}, {"1455523840384", 3}}
    

    如果你将其编组为 JSON:

    data, err := json.Marshal(s)
    fmt.Println(string(data), err)
    

    输出如你所愿:

    [["1455523840380",1],["1455523840383",2],["1455523840384",3]] <nil>
    

    1455523840380 等时间值是自 1970 年 1 月 1 日 UTC 以来经过的毫秒数。在 Go 中,您可以使用 Time.UnixNano() 方法从 time.Time 值中获取此值,然后将其除以 1000000(从纳秒中获取毫秒),例如:

    fmt.Println(time.Now().UnixNano() / 1000000) // Output: 1455526958178
    

    请注意,为了在 JSON 输出中将时间值作为字符串,您必须在 []ChartElement 中将这些时间值添加为 strings。要将这个毫秒值转换为string,可以使用strconv.FormatInt(),例如

    t := time.Now().UnixNano() / 1000000
    timestr := strconv.FormatInt(t, 10) // timestr is of type string
    

    【讨论】:

    • 伙计,你为我节省了大量时间,非常感谢!!希望其他人对你也有帮助!!!
    猜你喜欢
    • 1970-01-01
    • 2020-03-14
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-15
    相关资源
    最近更新 更多