登录
首页 >  Golang >  Go问答

使用 Golang 进行 JSON 动态解析

来源:stackoverflow

时间:2024-02-17 09:09:17 463浏览 收藏

对于一个Golang开发者来说,牢固扎实的基础是十分重要的,golang学习网就来带大家一点点的掌握基础知识点。今天本篇文章带大家了解《使用 Golang 进行 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 传递一个函数,这样就可以解决这个问题,但是我遇到了 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)
}

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注golang学习网公众号,一起学习编程~

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>