gpt4 book ai didi

json - 将 interface{} 直接转换为 Golang 中的 int,其中 interface 将数字存储为字符串

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:24 27 4
gpt4 key购买 nike

我得到了一个 map[string]interface{} 因为解码为 JSON;对于普通数据,接口(interface)大多数只是一个数字,但类型为字符串,如下所示:

var a interface{}
a="3"

然后所有数据将存储到一个结构中。

type someStruct struct {
ID string
Number1 int
Number2 int
Number3 int
Number4 int
}

所以我需要将接口(interface)转换为 int,但不能轻松高效地完成,因为只有代码是 https://play.golang.org/p/oktbvTUbk93 ,非常烦人,如果您考虑到我应该处理所有可能的错误这一事实,代码似乎不可读

我想将它直接转换为 int,我一直在寻找解决方案,但任何这种转换都可以按我的意愿工作 https://play.golang.org/p/Dw67U6kZwHC

如果你想知道为什么我不直接将它解码成结构体,那是因为它是动态数据,实际解码是这样发生的:

type dataIn struct {
Code int `json:"code"`
ID string `json:"id"`
Data interface{} `json:"data"`
}

然后我根据code和id来处理Data,它们都是不同的数据结构,所以我不能直接用JSON来处理

最佳答案

创建一个辅助函数,在一个地方为您解析和验证:

func parseInt(i interface{}) (int, error) {
s, ok := i.(string)
if !ok {
return 0, errors.New("not string")
}
return strconv.Atoi(s)
}

您可以在需要的地方使用它。这是一个完整的示例,其中我还使用了另一个辅助函数,它负责错误处理:

m := map[string]interface{}{
"number1": "1",
"number2": "2",
"number3": "3",
"number4": "4",
"ID": "asdsa",
"Title": "asdas",
}

getInt := func(key string) int {
n, err := parseInt(m[key])
if err != nil {
panic(err) // Decide what you wanna do with error
}
return n
}

// converting to struct
data := element{
ID: m["ID"].(string),
Title: m["Title"].(string),
Number1: getInt("number1"),
Number2: getInt("number2"),
Number3: getInt("number3"),
Number4: getInt("number4"),
}

fmt.Printf("%+v\n", data)

上面的输出(在 Go Playground 上尝试):

{ID:asdsa Title:asdas Number1:1 Number2:2 Number3:3 Number4:4}

另请注意开源包github.com/icza/dyno应该可以帮助您轻松处理动态对象。 (披露:我是作者。)它有一个 dyno.GetInteger() 函数,例如,它能够从多种类型中提取 int64 值(例如作为整数、 float 、字符串等)。

关于json - 将 interface{} 直接转换为 Golang 中的 int,其中 interface 将数字存储为字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49569791/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com