为了账号安全,请及时绑定邮箱和手机立即绑定

将具有 json 的字符串转换为 json 或 struct

将具有 json 的字符串转换为 json 或 struct

Go
米琪卡哇伊 2023-07-31 15:38:17
我从 API 收到此类响应:{    "ok": true,    "response": "[    {        "Id": 163,        "Name": "Availability",        "Path": "Performance|Tier1",        "frequency": "ONE_MIN",        "Values": [            {                "startTimeInMillis": 1571314200000,                "occurrences": 1,                "current": 1,                "min": 0,                "max": 0,                "useRange": false,                "count": 1,                "sum": 1,                "value": 1,                "standardDeviation": 0            },            {                "startTimeInMillis": 1571314260000,                "occurrences": 1,                "current": 1,                "min": 0,                "max": 0,                "useRange": false,                "count": 1,                "sum": 1,                "value": 1,                "standardDeviation": 0            },            }       ]    }]}我想将其转换为时间序列格式。为此,我首先尝试解组对此结构的响应:type App struct{    ID     string   `json:"metric_id"`    Name   string   `json:"metric_name"`    Path   string   `json:"metric_path"`    Frequency    string   `json:"frequency"`    Values []string `json:"metric_values"`} 我正在这样做:apprsp := App{}fmt.Println(json.Unmarshal([]byte(ame.Response), &apprsp))但我在 时遇到错误json.Unmarshal。我想做的是生成一个 json 格式:{'time':'value','time1':'value2'}其中time/time1和value/value2是startTimeInMillis值数组中的 和 值。json 解组时我做错了什么?应该如何解组上述数据?
查看完整描述

2 回答

?
不负相思意

TA贡献1777条经验 获得超10个赞

您的App结构甚至与您尝试解组的 json 文档没有密切相关。要解组 json 文档,您必须有一个与底层文档的结构有些匹配的 Go 结构。


type ResponseValue struct {

    StartTime int64 `json:"startTimeMillis"`

    // other elements of Values here, if you're interested in them

}


type Response struct {

  Id int `json:"Id"`

  Name string `json:"Name"`

  Path string `json:"Path"`

  Frequency string `json:"frequency"`

  Values []ResponseValue `json:"Values"`

}


type Body struct {

  Response []Response `json:"response"`

}


var data Body

json.Unmarshal([]byte(ame.Response),&data)

然后,您可以从 中提取时间序列data。


查看完整回答
反对 回复 2023-07-31
?
杨魅力

TA贡献1811条经验 获得超6个赞

这是你的响应结构

type Response struct {

    ID        int    `json:"Id"`

    Name      string `json:"Name"`

    Path      string `json:"Path"`

    Frequency string `json:"frequency"`

    Values    []struct {

        StartTimeInMillis int64 `json:"startTimeInMillis"`

        Occurrences       int   `json:"occurrences"`

        Current           int   `json:"current"`

        Min               int   `json:"min"`

        Max               int   `json:"max"`

        UseRange          bool  `json:"useRange"`

        Count             int   `json:"count"`

        Sum               int   `json:"sum"`

        Value             int   `json:"value"`

        StandardDeviation int   `json:"standardDeviation"`

    } `json:"Values"`

}


查看完整回答
反对 回复 2023-07-31
  • 2 回答
  • 0 关注
  • 134 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信