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

将嵌套字符串切片解组为 float32

将嵌套字符串切片解组为 float32

Go
隔江千里 2022-07-18 15:43:49
我有一个像[{"sequence": 12188764183, "bids": [["10167.66", "0.91182063"], ["10167.65", "0.016"], ["10164.46", "0.35778977"], ["10164.45", "5.714"], ["10164.01", "0.2"], ["10163.5", "0.01"], ["10163.49", "4.597"], ["10162.19", "0.761"], ["10162.17", "3.999"], ["10162.16", "2.4"], ["10161.93", "0.024"], ["10161.31", "0.00771652"], ["10160.07", "0.27"], ["10160", "3.47279335"], ["10159.99", "0.0011"], ["10159.88", "1.5"], ["10159", "0.20869106"], ["10158.79", "0.04"], ["10158.67", "4.5"], ["10158.03", "0.004"], ["10157.59", "0.725"], ["10156.99", "0.7893"], ["10156.98", "1.6"], ["10155", "0.1"], ["10154.52", "0.29542"], ["10154.15", "2.17"], ["10153.59", "0.3"], ["10151.58", "1.4055"], ["10151.2", "0.123"], ["10150", "0.77685084"], ["10149.99", "0.00104364"], ["10149.69", "1.85"], ["10148.66", "0.19707"], ["10148.65", "0.29554"], ["10148.27", "8.1"], ["10148.17", "0.084409"], ["10146.54", "1.88"], ["10145.74", "0.1721"], ["10145.72", "0.29554"], ["10145", "0.005"], ["10143.94", 我想float32在解组期间将内部出价数组转换为。在这里找到一堆答案。有些涉及使用“,字符串”标签。虽然,尚不清楚如何将其用于嵌套切片。我在 golang 文档中看到了一个示例,该示例用于json.RawMessage解组为未编组的 json。无论如何,我真的很感激你在这里的指点。现在我有这个,这不是我想要的package mainimport (    "encoding/json"    "fmt")
查看完整描述

1 回答

?
素胚勾勒不出你

TA贡献1827条经验 获得超9个赞

一种方法是,您可以编写辅助方法来在输入的每个深度进行转换。在您的情况下,唯一的区别是除了进行类型断言之外,在端点我们还必须解析字符串。以下是示例方法:


package main

import "fmt"

type Slice []interface{}

type Map map[string]interface{}


func (a Slice) A(n int) Slice {

   return a[n].([]interface{})

}


func (a Slice) M(n int) Map {

   return a[n].(map[string]interface{})

}


func (m Map) A(s string) Slice {

   return m[s].([]interface{})

}


func (a Slice) N(n int) float32 {

   var f float32

   fmt.Sscan(a[n].(string), &f)

   return f

}

和示例用法:


package main


import (

   "encoding/json"

   "fmt"

   "log"

   "os"

)


func main() {

   o, e := os.Open("a.json")

   if e != nil {

      log.Fatal(e)

   }

   a := Slice{}

   json.NewDecoder(o).Decode(&a)

   n := a.M(0).A("bids").A(0).N(0)

   fmt.Println(n == 10167.66)

}

如果您的 JSON 不同,您可以根据需要编写更多方法。


查看完整回答
反对 回复 2022-07-18
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号