Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Tatasusunan JSON sebagai struktur Go

Tatasusunan JSON sebagai struktur Go

王林
王林ke hadapan
2024-02-10 18:00:20885semak imbas

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
}

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": "***********"
  }
]

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)
}

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)
}

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

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam