簡體   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