gpt4 book ai didi

json - 我如何在 Go 中解析这个 JSON 字符串?

转载 作者:IT王子 更新时间:2023-10-29 01:18:52 24 4
gpt4 key购买 nike

有问题的 JSON 字符串如下所示:

{
"development":{
"connector":[
{"id":"connector-server-1", "host":"127.0.0.1", "port":4050, "wsPort":3050},
{"id":"connector-server-2", "host":"127.0.0.1", "port":4051, "wsPort":3051},
{"id":"connector-server-3", "host":"127.0.0.1", "port":4052, "wsPort":3052}
],
"chat":[
{"id":"chat-server-1", "host":"127.0.0.1", "port":6050},
{"id":"chat-server-2", "host":"127.0.0.1", "port":6051},
{"id":"chat-server-3", "host":"127.0.0.1", "port":6052}
],
"gate":[
{"id": "gate-server-1", "host": "127.0.0.1", "wsPort": 3014}
]
},
"production":{
"connector":[
{"id":"connector-server-1", "host":"127.0.0.1", "port":4050, "wsPort":3050},
{"id":"connector-server-2", "host":"127.0.0.1", "port":4051, "wsPort":3051},
{"id":"connector-server-3", "host":"127.0.0.1", "port":4052, "wsPort":3052}
],
"chat":[
{"id":"chat-server-1", "host":"127.0.0.1", "port":6050},
{"id":"chat-server-2", "host":"127.0.0.1", "port":6051},
{"id":"chat-server-3", "host":"127.0.0.1", "port":6052}
],
"gate":[
{"id": "gate-server-1", "host": "127.0.0.1", "wsPort": 3014}
]
}
}

我想用这样的代码解析它:

package config

import(
"sync"
"io/ioutil"
"encoding/json"
"errors"
"log"
)

type Service struct {
Id string `json:"id"`
Host string `json:"host"`
Port uint `json:"port"`
QueryPort uint `json:"queryPort"`
WsPort uint `json:"wsPort"`
ServiceType string
}

type Config struct {
Services []Service
Master Service
Mutex sync.RWMutex
}

func LoadServers(filepath, env string) (*Config, error) {
// 读取文件
content, err := ioutil.ReadFile(filepath)
if err != nil {
return nil, err
}

configs := make(map[string]map[string][]Service, 0)
err = json.Unmarshal(content, configs)
if err != nil {
return nil, err
}
}

我希望我的代码能够将此 JSON 字符串解析为 map[string]map[string][]Service

但它显示错误:

json: Unmarshal(non-pointer map[string]map[string][]config.Service)

最佳答案

configs的地址传给json.Unmarshal。例如,

configs := make(map[string]map[string][]Service, 0)
err = json.Unmarshal(content, &configs)
if err != nil {
return nil, err
}
fmt.Println(configs)

输出:

map[production:map[connector:[{connector-server-1 127.0.0.1 4050 0 3050 } {connector-server-2 127.0.0.1 4051 0 3051 } {connector-server-3 127.0.0.1 4052 0 3052 }] gate:[{gate-server-1 127.0.0.1 0 0 3014 }] chat:[{chat-server-1 127.0.0.1 6050 0 0 } {chat-server-2 127.0.0.1 6051 0 0 } {chat-server-3 127.0.0.1 6052 0 0 }]] development:map[chat:[{chat-server-1 127.0.0.1 6050 0 0 } {chat-server-2 127.0.0.1 6051 0 0 } {chat-server-3 127.0.0.1 6052 0 0 }] gate:[{gate-server-1 127.0.0.1 0 0 3014 }] connector:[{connector-server-1 127.0.0.1 4050 0 3050 } {connector-server-2 127.0.0.1 4051 0 3051 } {connector-server-3 127.0.0.1 4052 0 3052 }]]]
&{[] { 0 0 0 } {{0 0} 0 0 0 0}}

关于json - 我如何在 Go 中解析这个 JSON 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14709713/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com