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 结构的详细内容,更多请关注编程网其它相关文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341