gpt4 book ai didi

arrays - 如何在多对象 JSON 数组中编码/编码来 self 的服务器的响应

转载 作者:IT王子 更新时间:2023-10-29 02:19:22 24 4
gpt4 key购买 nike

我正在尝试将来自服务器的响应格式化为多对象 JSON 数组。我尝试了 slice[]Struct 但我相信我无法正确理解它们的用法。

我试过这里提到的方法 - https://play.golang.org/p/9OEPzbf0Me0但在我的情况下不起作用

我正在使用 golang 获取查询参数的响应

router.HandleFunc("/v1.0/singles", GetInfo).Methods("GET").Queries("Group", "{group}")

//controller.go

func SendToServer(jsonValue []byte, command string) (models.JSON, error) {

var pdatar models.JSON
s := []string{"http://172.xx.xxx.xx:xxxxx/", command}

response, err := http.Post(strings.Join(s, ""), "application/json", bytes.NewBuffer(jsonValue))

data, err := ioutil.ReadAll(response.Body)

err = json.Unmarshal(data, &pdatar)

mdatar := make(models.JSON)
mdatar["ID"] = pdatar["id"]
mdatar["Name"] = pdatar["name"]

fmt.Println(mdatar) //This is how it is coming map[ID:[877,235], Name:[FCU, GHP]]

/*Another attempt

var temp models.Arr
json.Unmarshal(data, &temp)
fmt.Println(temp) ---- returning null

*/
return mdatar, nil
}

func (c Controller) GetSingle(pdata models.Single) (models.JSON, error) {

mdata := make(models.JSON)
mdata["group"] = pdata.Group

jsonValue, err := json.Marshal(mdata)

pdatar, err := SendToServer(jsonValue, "func_info")

return pdatar, nil

// json.NewEncoder(w).Encode(pdatar) //sending this to my main function

}

//model.go

type JSON map[string]interface{}

type Single struct {
ID int `json:"id"`
Name string `json:"name"`
}

type Data []Single
type Arr [][]string

我从我的 API 收到了某种格式的响应

    {

"id":[877,235,312,429],
"name" ["FCU","GHP","c","d"],
"group":["x","x","y","z"]
}

使用当前代码,我收到了回复

{"id":[877 235], "name": ["FCU" "GHP"] 

虽然我期待一个回应

{ 

"data":
[
{"id": 877
"name" : "FCU"
}

{"id": 235
"name": "GHP"
}


]
}

最佳答案

你的 mdatarr 没有改变格式,所以这个结果是有道理的。

如果从服务器接收到的数据是以下格式:

{
"id": [877,235,312,429],
"name" ["FCU","GHP","c","d"],
"group": ["x","x","y","z"]
}

然后你需要翻译它。理想情况下,您会修复服务器,以便它以以下格式发送数据:

{
{
"id": 877,
"name": "FCU",
"group": "x",
},
...
}

如果服务器可以发送类似上面的内容,那么您可以简单地将其解码为一个 models.Data 对象。

如果那不是一个选项,并且您确实需要在客户端进行翻译,那么您将需要一个执行如下操作的 for 循环:

ids := pdatarr["id"]
names := pdatarr["name"]
...

if len(ids) != len(names) {
return nil, errors.New("Invalid input format")
}

var mdatar models.Data
for i := range(ids) {
mdatar = append(mdatar, models.Single{ids[i], names[i], ...})
}

return models.JSON{"data": mdatar}, nil

关于arrays - 如何在多对象 JSON 数组中编码/编码来 self 的服务器的响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55407929/

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