我正在开发将接收JSON的Web服务。去转换类型太严格。将接口{}转换为某种类型
没等我下面的函数interface{}
转换成bool
func toBool(i1 interface{}) bool {
if i1 == nil {
return false
}
switch i2 := i1.(type) {
default:
return false
case bool:
return i2
case string:
return i2 == "true"
case int:
return i2 != 0
case *bool:
if i2 == nil {
return false
}
return *i2
case *string:
if i2 == nil {
return false
}
return *i2 == "true"
case *int:
if i2 == nil {
return false
}
return *i2 != 0
}
return false
}
我认为,功能还不够完善,我需要的功能转换interface{}
在string
,int
,int64
等
所以我问题:Go
中是否有库(函数集)会将interface{}
转换为某些类型
UPDATE
我的web服务接收JSON。我在map[string]interface{}
中解码,我无法控制编码它的人。
因此,我收到的所有值都是interface{}
,我需要将其转换为某些类型。
所以它可能是nil
,int
,float64
,string
,[...]
,{...}
,我希望把它转换为它应该是什么。例如int
,float64
,string
,[]string
,map[string]string
与所有可能的情况,包括nil
,错误的价值观处理等
UPDATE2
我收到{"s": "wow", "x":123,"y":true}
,{"s": 123, "x":"123","y":"true"}
,{a:["a123", "a234"]}
,{}
var m1 map[string]interface{}
json.Unmarshal(b, &m1)
s := toString(m1["s"])
x := toInt(m1["x"])
y := toBool(m1["y"])
arr := toStringArray(m1["a"])
我不认为有一个。 – Agis
你知道Go的'encoding/json'包会为你做所有事情,对吧?但无论如何,反射库可以查看界面并告诉你真正的底层值是什么,如果这就是你的意思。 –
为什么?你能告诉我更多关于你想要解决的现实世界问题吗? - 你知道https://gobyexample.com/json吗? – Matthias