gpt 回答,看是否有用
-----------
可以使用 Go 内置的 encoding/json 包将 JSON 解析成一个结构体。以下是一个 Go 示例代码:
package main
import (
"encoding/json"
"fmt"
)
// JSON 对应的结构体
type Config struct {
Server1 struct {
Domain string `json:"domain"`
Api struct {
Api1 string `json:"api1"`
} `json:"api"`
} `json:"server1"`
Server2 struct {
Domain string `json:"domain"`
Api struct {
Api2 string `json:"api2"`
} `json:"api"`
} `json:"server2"`
}
// Api 类型封装了 server 的信息和 API 的路径
type Api struct {
baseURL string
path string
}
// NewApi 方法创建一个 Api 对象
func NewApi(config *Config, serverName string, apiName string) *Api {
api := &Api{}
switch serverName {
case "server1":
api.baseURL = config.Server1.Domain
switch apiName {
case "api1":
api.path = config.Server1.Api.Api1
default:
panic(fmt.Sprintf("unsupported API: %s", apiName))
}
case "server2":
api.baseURL = config.Server2.Domain
switch apiName {
case "api2":
api.path = config.Server2.Api.Api2
default:
panic(fmt.Sprintf("unsupported API: %s", apiName))
}
default:
panic(fmt.Sprintf("unsupported server: %s", serverName))
}
return api
}
// URL 方法返回拼接过的完整 URL
func (api *Api) URL() string {
return api.baseURL + api.path
}
func main() {
// 假设这是从 HTTP 响应体中获取的 JSON 数据
jsonStr := `
{
"server1": {
"domain": "
https://www.baidu.com",
"api": {
"api1": "/api1"
}
},
"server2": {
"domain": "
https://www.google.com",
"api": {
"api2": "/api2"
}
}
}
`
// 将 JSON 解析成结构体
var config Config
err := json.Unmarshal([]byte(jsonStr), &config)
if err != nil {
panic(err)
}
// 创建 API 对象并输出 URL
api1 := NewApi(&config, "server1", "api1")
fmt.Println(api1.URL()) // 输出
https://www.baidu.com/api1 api2 := NewApi(&config, "server2", "api2")
fmt.Println(api2.URL()) // 输出
https://www.google.com/api2}
-----------