Подход для разбора любого JSON может быть достигнут следующим.
Шаг 1: Определение структур
type OuterJson struct {
Table string `json:"table"`
Action string `json:"action"`
DataJson []DataJson `json:"data"`
}
type DataJson struct {
Symbol string `json:"symbol"`
Timestamp string `json:"timestamp"`
BidsJson [][]float64 `json:"bids"`
AsksJson [][]float64 `json:"asks"`
}
Шаг 2: Объявление входа и выхода
input := `{"table":"orderBook10","action":"update","data":[{"symbol":"XBTUSD","bids":[[3996,49137],[3995.5,116],[3995,165],[3994.5,166],[3994,237],[3993.5,45],[3992,20064],[3991.5,209],[3991,134],[3990.5,2948]],"timestamp":"2019-03-23T00:34:40.505Z","asks":[[3996.5,975],[3997,289],[3997.5,334],[3998,419],[3998.5,423],[3999,930],[3999.5,547],[4000,538],[4000.5,703],[4001,997]]}]}`
var output OuterJson
Шаг 3: Получить выходной сигнал от заданного входа (или Unmarshalling)
json.Unmarshal([]byte(input), &output)
Объединяя все, вы получаете
package main
import (
"fmt"
"encoding/json"
)
type OuterJson struct {
Table string `json:"table"`
Action string `json:"action"`
DataJson []DataJson `json:"data"`
}
type DataJson struct {
Symbol string `json:"symbol"`
Timestamp string `json:"timestamp"`
BidsJson [][]float64 `json:"bids"`
AsksJson [][]float64 `json:"asks"`
}
func main() {
fmt.Println("Hello, playground")
input := `{"table":"orderBook10","action":"update","data":[{"symbol":"XBTUSD","bids":[[3996,49137],[3995.5,116],[3995,165],[3994.5,166],[3994,237],[3993.5,45],[3992,20064],[3991.5,209],[3991,134],[3990.5,2948]],"timestamp":"2019-03-23T00:34:40.505Z","asks":[[3996.5,975],[3997,289],[3997.5,334],[3998,419],[3998.5,423],[3999,930],[3999.5,547],[4000,538],[4000.5,703],[4001,997]]}]}`
var output OuterJson
json.Unmarshal([]byte(input), &output)
fmt.Println(output)
}
Попробуйте ссылку