[英]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.