[英]Golang Dynamically Unmarshalling JSON
給定下面的函數,在 Go 中是否有可能在不知道運行時c
的類型的情況下解組jsonString
?
func findChargedItems(fs financialService, conditions []string) ([]*models.ChargedItem, error) {
var jsonResult []string
f := getChargedItemsQuery(conditions)
q, _, _ := f.ToSql()
err := fs.db.Select(&jsonResult, q)
if err != nil {
return nil, err
}
jsonString := fmt.Sprintf("[%v]", strings.Join(jsonResult, ","))
c := make([]*models.ChargedItem, 0)
err = json.Unmarshal([]byte(jsonString), &c)
if err != nil {
return nil, err
}
return c, nil
}
問題是我有大量模型需要執行這個確切的過程,我正在重復自己以實現這一目標。 我只想擁有一個“通用”函數findEntities
,該函數與ChargedItem
和getChargedItemsQuery
無關。 我意識到我可以只為getChargeditemsQuery
傳遞一個函數來getChargeditemsQuery
這個問題,但是我遇到了json.Unmarshal
問題,例如,當我嘗試使用一個接口時,json 字段沒有正確映射。 有沒有辦法在不影響數據模型的情況下實現我想要做的事情?
我不確定您要做什么,但這可能不是一個好主意。 無論如何,這應該做你想要的:
package main
import (
"encoding/json"
"fmt"
)
func main() {
// do what youre trying to do
var (
a = []byte("[10, 11]")
b []interface{}
)
json.Unmarshal(a, &b)
// then fix it later
c := make([]float64, len(b))
for n := range c {
c[n] = b[n].(float64)
}
fmt.Println(c)
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.