php小編魚仔為您介紹JSON數(shù)組作為Go結(jié)構(gòu)的使用方法。在Go語言中,JSON數(shù)組是一種常見的數(shù)據(jù)結(jié)構(gòu),它可以用來表示多個(gè)相同類型的數(shù)據(jù)。通過將JSON數(shù)組映射為Go的結(jié)構(gòu)體,我們可以方便地對(duì)其進(jìn)行操作和處理。本文將詳細(xì)介紹如何使用Go語言中的JSON包來解析和構(gòu)建JSON數(shù)組,并將其轉(zhuǎn)換為相應(yīng)的Go結(jié)構(gòu)體,以實(shí)現(xiàn)數(shù)據(jù)的有效管理和處理。無論您是Go語言初學(xué)者還是有一定經(jīng)驗(yàn)的開發(fā)者,本文都將為您帶來實(shí)用的技巧和方法,幫助您更好地理解和應(yīng)用JSON數(shù)組作為Go結(jié)構(gòu)的相關(guān)知識(shí)。
問題內(nèi)容
我試圖從 json 文件調(diào)用對(duì)象數(shù)組,但總是遇到錯(cuò)誤:“無法將數(shù)組解組為 config.appconfig 類型的 go 值”。
如何確保我的 go 結(jié)構(gòu)如何調(diào)用 json 文件中的對(duì)象數(shù)組?
以下是我設(shè)置 go 結(jié)構(gòu)的配置文件和 json 文件:
config.go
package config import ( "encoding/json" "io/ioutil" ) type easy struct { uid string `json:"uid"` } type auth struct { code string `json:"code"` } type appconfig struct { openapimode string `json:"openapimode"` openapiurl string `json:"openapiurl"` clientid string `json:"clientid"` secret string `json:"secret"` authmode string `json:"authmode"` easy easy `json:"easy"` auth auth `json:"auth"` deviceid string `json:"deviceid"` uid string `json:"-"` mqttuid string `json:"-"` accesstoken string `json:"-"` refreshtoken string `json:"-"` expiretime int64 `json:"-"` } var app = appconfig{ openapimode: "mqtt", openapiurl: "openapi.tuyacn.com", } func loadconfig() error { return parsejson("webrtc.json", &app) } func parsejson(path string, v interface{}) error { data, err := ioutil.readfile(path) if err != nil { return err } err = json.unmarshal(data, v) return err }
登錄后復(fù)制
json 文件
[ { "openAPIMode": "mqtt", "openAPIUrl": "openapi.tuyaus.com", "clientId": "*****", "secret": "**************", "authMode": "easy", "easy": { "uId": "**********" }, "auth": { "code": "" }, "deviceId": "***********" }, { "openAPIMode": "mqtt", "openAPIUrl": "openapi.tuyaus.com", "clientId": "*****", "secret": "**************", "authMode": "easy", "easy": { "uId": "**********" }, "auth": { "code": "" }, "deviceId": "***********" } ]
登錄后復(fù)制
預(yù)先感謝您的幫助!
解決方法
您的配置 json 文件是一個(gè) json 數(shù)組,您正在將其解析為結(jié)構(gòu),您需要將其解析為結(jié)構(gòu)數(shù)組。
要修復(fù)您的代碼,請(qǐng)將 app
的初始化更改為此。
var app []appconfig func loadconfig() error { return parsejson("webrtc.json", &app) }
登錄后復(fù)制
這是完整的示例代碼。
package main import ( "encoding/json" "fmt" "io/ioutil" ) type Easy struct { UID string `json:"uId"` } type Auth struct { Code string `json:"code"` } type APPConfig struct { OpenAPIMode string `json:"openAPIMode"` OpenAPIURL string `json:"openAPIUrl"` ClientID string `json:"clientId"` Secret string `json:"secret"` AuthMode string `json:"authMode"` Easy Easy `json:"easy"` Auth Auth `json:"auth"` DeviceID string `json:"deviceId"` UID string `json:"-"` MQTTUID string `json:"-"` AccessToken string `json:"-"` RefreshToken string `json:"-"` ExpireTime int64 `json:"-"` } var App []APPConfig func LoadConfig() error { return parseJSON("webrtc.json", &App) } func parseJSON(path string, v interface{}) error { data, err := ioutil.ReadFile(path) if err != nil { return err } err = json.Unmarshal(data, v) return err } func main() { err := LoadConfig() if err != nil { panic(err) } fmt.Printf("%+v\n", App) }
登錄后復(fù)制