首頁 > 後端開發 > Golang > JSON 陣列作為 Go 結構

JSON 陣列作為 Go 結構

王林
發布: 2024-02-10 18:00:20
轉載
925 人瀏覽過

JSON 数组作为 Go 结构

php小編魚仔為您介紹JSON陣列作為Go結構的使用方法。在Go語言中,JSON數組是一種常見的資料結構,它可以用來表示多個相同類型的資料。透過將JSON數組映射為Go的結構體,我們可以輕鬆地對其進行操作和處理。本文將詳細介紹如何使用Go語言中的JSON套件來解析和建構JSON數組,並將其轉換為對應的Go結構體,以實現資料的有效管理和處理。無論您是Go語言初學者還是有一定經驗的開發者,本文都將為您帶來實用的技巧和方法,幫助您更好地理解和應用JSON數組作為Go結構的相關知識。

問題內容

我試著從 json 檔案呼叫物件數組,但總是遇到錯誤:「無法將陣列解組為 config.appconfig 類型的 go 值」。 如何確保我的 go 結構如何呼叫 json 檔案中的物件陣列? 以下是我設定 go 結構的設定檔和 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
}
登入後複製

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": "***********"
  }
]
登入後複製

預先感謝您的幫忙!

解決方法

您的配置 json 檔案是一個 json 數組,您正在將其解析為結構,您需要將其解析為結構數組。

要修復您的程式碼,請將 app 的初始化變更為此。

var app []appconfig

func loadconfig() error {
    return parsejson("webrtc.json", &app)
}
登入後複製

這是完整的範例程式碼。

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)
}
登入後複製

以上是JSON 陣列作為 Go 結構的詳細內容。更多資訊請關注PHP中文網其他相關文章!

相關標籤:
來源:stackoverflow.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
最新問題
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板