gpt4 book ai didi

json - 从 API 解析结构

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

我正在尝试通过 Go 访问存储在 json 文件中的一些信息。我有两个相关的问题。一是我不确定如何组织我的结构,二是我如何通过变量访问它们。我会标记我的代码以使其更有意义

// To be clear, this is dummy info and I'm linting my actual json
// data. It loads fine, I just don't want to get hung up on this side
{
"A": {
"lob": "A",
"url": [
"example.com",
"test.com"]
}
"B": {
"lob": "B",
"url": [
"example2.com",
"test2.com"]

}
}

所以担心的是选项的结构是相同的。我将其构建为 REST AP 的一部分。希望用户可以使用http://testapi.com/getdata/A它将返回 A 下的 url 和名称信息,B 也是如此。照原样,它将它们作为同一结构的单独组件加载:

type SiteList struct {
A struct {
Lob string `json:"lob"`
URL []string `json:"url"`
} `json:"test"`
B struct {
Lob string `json:"lob"`
URL []string `json:"url"`
} `json:"test2"`
}

我可以手动执行 .A 或 .B,但我想知道当请求进来时如何处理它,以便我的 API 将只返回 A 或 B 下的数据。

最佳答案

如果您打算通过 http://testapi.com/getdata/A 访问 API 来使用 API或 http://testapi.com/getdata/B那么 AB 可以被认为是驱动 API 行为的参数。

如果您传递的是 A,您基本上想要访问与 A 关联的站点数据,如果您传递的是 B,应返回 B 的站点数据。

在内部组织这些数据的一种简单方法是使用一个专用的 Go 类型 site,它包含 LobURL 并将所有内容安排在一个通过 map[string]site 映射,它在您的服务器启动时初始化。

然后您可以动态访问提供给您的 API 的参数(AB,但可以轻松扩展),从 map 中查找站点信息,并在如果是有效站点,则返回编码为 JSON 的相应数据。

package main

import (
"encoding/json"
"fmt"
"log"
"net/http"
)

type site struct {
Lob string `json:"lob"`
URL []string `json:"url"`
}

var sites = map[string]site{
"A": site{
Lob: "A",
URL: []string{
"example.com",
"test.com",
},
},
"B": site{
Lob: "B",
URL: []string{
"example2.com",
"test2.com",
},
},
}

const endpoint = "/getdata/"

func handler(w http.ResponseWriter, r *http.Request) {
lob := r.URL.Path[len(endpoint):]
s, ok := sites[lob]
if !ok {
w.WriteHeader(http.StatusNotFound)
return
}

resp, err := json.Marshal(s)
if err != nil {
w.WriteHeader(http.StatusInternalServerError)
return
}

w.Header().Set("Content-Type", "application/json; charset=UTF-8")
w.Write(resp)
}

func main() {
http.HandleFunc(endpoint, handler)
log.Fatal(http.ListenAndServe(":8080", nil))
}

关于json - 从 API 解析结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49912878/

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