0
我有JSON,看起来像这样:如何解析两种不同的数据类型JSON数组到一个结构中Golang
{
"a": [
[
"12.58861425",
10.52046452
],
[
"12.58861426",
4.1073
]
]
"b": [
[
"12.58861425",
10.52046452
],
[
"12.58861426",
4.1073
]
]
"c": "true"
"d": 1234
}
我想解组到我创建了一个结构如下:
type OrderBook struct {
\t A [][2]float32 `json:"a"`
\t B [][2]float32 `json:"b"`
C string `json:"c"`
\t D uint32 `json:"d"`
}
//Note this won't work because the JSON array contains a string and a float value pair rather than only floats.
通常我会再转换这个JSON成一个struct在Golang像这样:
orders := new(OrderBook)
err = json.Unmarshal(JSON, &orders)
既然不能定义类型结构相匹配的JSON这是不行的。做一些阅读,我认为解组入界面,然后通过类型检查使用界面数据可能是一个解决方案。
我正在朝着正确的方向前进吗?
一个模板展示了如何在界面中使用数据的过程中真的有所帮助。
我会建议反编组到接口,有相同的问题更简单的解决方案。这里有几条建议可能会让你朝着适当的解决方案迈进。因此,一种选择是提供'UnmarshalJSON'的定制实现(https://gist.github.com/mdwhatcott/8dd2eef0042f7f1c0cd8),您将在其中提供自定义逻辑以将字符串转换为双精度。另一个将保持一切都一样,但只是将这些内部数组定义为一个'[] interface {}'。你也可以在此之后进行转换,只是我会建议尽可能具体。 – evanmcdonnal
对我来说,最好是让你制作标准的JSON。生成JSON的人是外部程序还是程序? – Apin
我同意,如果你能控制json的结构,那还会更好。但是,通常情况下你不这样做,所以你可以使用我的答案。 – Dale