我正在開發將接收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