json - 如何使用 Golang func json.Unmarshal 解码这个复杂的 Json 数据?

标签 json go unmarshalling

我有这样的 json 对象:

{  
  "action":"GetLoad",
  "resource_id":"lb-cdvyel0v",
  "ret_code":0,
  "meter_set":[  
      {  
        "data_set":[  
            {  
              "data":[  
                  [  
                    1478672400,
                    [  
                        1,
                        0
                    ]
                  ],
                  [  
                    1,
                    0
                  ],
                  [  
                    0,
                    0
                  ],
                  [  
                    8,
                    0
                  ],
                  [  
                    1,
                    0
                  ]
              ],
              "eip_id":"eip-jf79ljt7"
            },
            {  
              "data":[  
                  [  
                    1478693280,
                    [  
                        0,
                        0
                    ]
                  ],
                  [  
                    1,
                    0
                  ],
                  [  
                    0,
                    0
                  ]
              ],
              "eip_id":"eip-mw6n6wg0"
            }
        ],
        "meter_id":"uaffic"
      }
  ]
}

我尝试这样解决问题:

type CommonResponse struct {                                                                             
    Action  string `json:"action"`
    JobID   string `json:"job_id"`
    RetCode int    `json:"ret_code"`
    Message string `json:"message"`
}

type GetLoadResponse struct {
    MeterSet   []LoadMeter `json:"meter_set"`
    ResourceId string              `json:"resource_id"`
    CommonResponse
}
type LoadMeter struct {                                                                          
    MeterID string              `json:"meter_id"`
    DataSet LoadDataSet `json:"data_set"`
}     

type LoadDataSet struct {
    EipID string        `json:"eip_id"`
    Data  []interface{} `json:"data"`
}     

func Get(response interface{}) {
    str := `{ "action": "GetLoad", "resource_id": "lb-cdvyel0v",   "ret_code": 0, "meter_set": [ { "data_set": [ { "data": [ [ 1478672400, [ 1, 0 ] ], [ 1, 0 ], [ 0, 0 ], [ 8, 0 ], [ 1, 0 ] ], "eip_id": "eip-jf79ljt7" }, { "data": [ [ 1478693280, [ 0, 0 ] ], [ 1, 0 ], [ 0, 0 ] ], "eip_id": "eip-mw6n6wg0" } ], "meter_id": "uaffic" } ] }`

    result := []byte(str)
    err := json.Unmarshal(result, &response)
    fmt.Println(err)
}
func main() {
    var res GetLoadResponse
    Get(&res)
    //Get(res) // Will not be wrong, but res is null
    fmt.Println(res)
}

然后,我得到了这个错误: 无法将数组解码为 main.LoadDataSet 类型的 Go 值

Playground :https://play.golang.org/p/ywFUu2MVNR

JSON数据的图片:

enter image description here

最佳答案

meter_set 元素中的 data_set 是一个 LoadDataSet 数组。将您的 LoadMeter 更改为:

type LoadMeter struct {                                                                          
      MeterID string              `json:"meter_id"`
      DataSet []LoadDataSet       `json:"data_set"`
}   

关于json - 如何使用 Golang func json.Unmarshal 解码这个复杂的 Json 数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40519692/

相关文章:

php - unmarshalItem DynamoDB 和 PHP 不工作

go - 用于接口(interface)及其实现的自定义 UnmarshalYAML 接口(interface)

javascript - 迭代 javascript 对象

c# - 服务器端和客户端方法

go - 如何仅将一个文件部署到Google App Engine?

concurrency - channel 是否通过引用隐式传递

java - JSONArray[0] 不是 JSONObject 异常

php - laravel 4.1 用数据库中的数据填充表格

mysql - 无法使用 go 和 docker 连接到 mysql 服务器 - 调用 tcp 127.0.0.1 :3306: connect: connection refused

java - 在 java 中处理 XACML 策略