簡體   English   中英

Golang用一個字符串和一個float64將JSON解碼為切片

[英]Golang decoding JSON into slice with one string and one float64

我正在服務器上的數據庫上運行查詢。 問題是,當我嘗試將JSON解碼為2D切片時,出現錯誤,因為其中一個元素是字符串,另一個元素是float64。

解決這個問題的一種方法是在解碼JSON字符串之前,先加引號使數字成為字符串,然后再對其進行解碼。 但是有更好的方法嗎? 有什么辦法可以在可以解碼JSON代碼的地方修改代碼的結構?

2018/05/04 12:32:19 json:無法將數字解組到字符串類型的Go struct字段.values中

import (
"fmt"
"encoding/json"
"strings"
"io"
"log"
)

func main(){
    str := "{\"results\":[{\"statement_id\":0,\"series\":[{\"name\":\"_\",\"columns\":[\"time\",\"last\"],\"values\":[[\"2018-03-20T18:45:57.07Z\",142774272]]}]}]}"

    type Response struct {
        Results []struct {
            StatementID int `json:"statement_id"`
            Series []struct {
                Name string `json:"name"`
                Columns []string `json:"columns"`
                Values [][]string `json:"values"`
            } `json:"series"`
        } `json:"results"`
    }

    dec := json.NewDecoder(strings.NewReader(str))
        for {
            var m Response
            if err := dec.Decode(&m); err == io.EOF {
                break
            } else if err != nil {
                log.Fatal(err)
            }
            fmt.Println(m.Results[0].Series[0].Values[0])
        }
    }

這是一個非常不幸的API,必須使用,但是有一個(有些笨拙)的解決方法:

Values [][]interface{} `json:"values"`

基本上,這就是說“一系列未知類型的事物”。 這將允許解碼器正確解碼,但是它將要求您執行一些類型斷言以實際使用值,以便從“未知類型”轉換為可以實際使用的已知類型:

strVal := m.Results[0].Series[0].Values[0][0].(string)
floatVal := m.Results[0].Series[0].Values[0][1].(float64)

可運行的示例: https//play.golang.org/p/ikIHnXlSlYx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM