Golang JSON如何解码具有不同元素数据类型的二维数组

时间:2019-09-06 03:40:52

标签: json go buffer

我需要解析json数据,并且解析对象结构或纯数组(具有相同类型的元素)没有问题

go版本go1.12.9 darwin / amd64

({{1)}的Json格式

[uint8,uint8,uint32,uint16,uint16,[3][20]int16][]

需要解析为以下结构

[
    [
        0,
        0,
        297,
        153,
        78,
        [
            [1871, 1547, ...],
            [...],
            [...]
        ]
    ]
    ...
]

如何解析

2 个答案:

答案 0 :(得分:0)

一种方法是:

decoder:=json.NewDecoder(input)
decoder.UseNumber()
var array []interface{}
decoder.Decode(&array)
heartBeat.Template=uint8(array[0].(json.Number).Int64())
heartBeat.Index=uint32(array[2].(json.Number).Int64())
...
feature:=array[5].([]interface{})
heartBeat.Feature[0][0]=int16(feature[0].([]interface{})[0].(json.Number).Int64())

当然,您必须在代码中添加错误和范围检查。

答案 1 :(得分:0)

我已经解决了

var bytesData = []byte(`[........]`)
var entries [][]interface{}
if err := json.Unmarshal(bytesData, &entries); err != nil {
    log.Fatal(err)
}

for _, value := range entries {
    hb := HeartBeat{
        Template: uint8(value[0].(float64)),
        Calssify: uint8(value[1].(float64)),
        Index:    uint32(value[2].(float64)),
        Tr:       uint16(value[3].(float64)),
        Hr:       uint16(value[4].(float64)),
    }
    for arrIndex, arr := range value[5].([]interface{}) {
        for listIndex, list := range arr.([]interface{}) {
            hb.Feature[arrIndex][listIndex] = int16(list.(float64))
        }
    }
    fmt.Println(hb)
}

在线预览地址 play golang