Tatasusunan JSON sebagai struktur Go

王林
Lepaskan: 2024-02-10 18:00:20
ke hadapan
884 orang telah melayarinya

JSON 数组作为 Go 结构

editor php Yuzai memperkenalkan anda kepada penggunaan tatasusunan JSON sebagai struktur Go. Dalam bahasa Go, tatasusunan JSON ialah struktur data biasa, yang boleh digunakan untuk mewakili berbilang data daripada jenis yang sama. Dengan memetakan tatasusunan JSON kepada struktur Go, kami boleh mengendalikan dan memprosesnya dengan mudah. Artikel ini akan memperkenalkan secara terperinci cara menggunakan pakej JSON dalam bahasa Go untuk menghuraikan dan membina tatasusunan JSON, dan menukarnya kepada struktur Go yang sepadan untuk mencapai pengurusan dan pemprosesan data yang berkesan. Sama ada anda seorang pemula dalam bahasa Go atau pembangun yang berpengalaman, artikel ini akan membawa anda petua dan kaedah praktikal untuk membantu anda memahami dan menggunakan tatasusunan JSON dengan lebih baik sebagai pengetahuan berkaitan struktur Go.

Kandungan soalan

Saya cuba memanggil tatasusunan objek daripada fail json tetapi sentiasa mendapat ralat: "Tidak boleh menyahmarshal tatasusunan ke nilai go jenis config.appconfig". Bagaimanakah saya memastikan struktur go saya memanggil pelbagai objek dalam fail json? Berikut ialah fail konfigurasi dan fail json yang saya gunakan untuk menyediakan struktur go:

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
}
Salin selepas log masuk

fail 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": "***********"
  }
]
Salin selepas log masuk

Terima kasih terlebih dahulu atas bantuan anda!

Penyelesaian

Fail json konfigurasi anda ialah tatasusunan json dan anda sedang menghuraikannya ke dalam struct, anda perlu menghuraikannya ke dalam tatasusunan struct.

Untuk membetulkan kod anda, tukar permulaan app kepada ini.

var app []appconfig

func loadconfig() error {
    return parsejson("webrtc.json", &app)
}
Salin selepas log masuk

Ini adalah kod sampel lengkap.

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)
}
Salin selepas log masuk

Atas ialah kandungan terperinci Tatasusunan JSON sebagai struktur Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!