繁体   English   中英

Golang 动态解组 JSON

[英]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 ,该函数与ChargedItemgetChargedItemsQuery无关。 我意识到我可以只为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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM