go - 是否可以将 json 对象数组作为 URL 的参数传递?
问题描述
我正在为 Golang 中的 restAPI 实现进行单元测试。我需要将一个对象数组传递给 url。这是我拥有的结构示例:
type version struct {
Name string `json:"name"`
Ver string `json:"ver"`
}
type event struct {
ID string `json:"id"`
Title string `json:"Title"`
Description string `json:"Description"`
Versions []version `json:"versions"`
}
我在邮递员中测试的示例 json 输入将如下所示
{
"id": "101",
"title": "This is simple Golang title for testing!",
"Description":"Sample code for REST api implementation in Golang 2021!",
"versions": [
{
"name": "pingPong",
"ver": "10.2"
},
{
"name": "Ninja",
"ver": "10.24"
}
]
}
我的问题是如何将对象数组作为 URL 参数传递。我希望有类似下面的内容,但不希望如何填充我由...突出显示的结尾部分
url?ID=20&Title=urlTitle&Description=UrlDescription&...
解决方案
我不知道你想要的URL是什么样的,所以我自己写了一个,你可以随意更改它,让我补充一下,我不知道你有多少个版本,所以我写了这样无论你有多少版本,它都可以处理它。
package main
import (
"fmt"
"strings"
"encoding/json"
)
var jsonData string =
`{
"id": "101",
"title": "This is simple Golang title for testing!",
"Description":"Sample code for REST api implementation in Golang 2021!",
"versions": [
{
"name": "pingPong",
"ver": "10.2"
},
{
"name": "Ninja",
"ver": "10.24"
}
]
}`
type (
Event struct {
Id string `json:"id"`
Title string `json:"title"`
Description string `json:"description"`
Versions []Version `json:"versions"`
}
Version struct {
Name string `json:"name"`
Ver string `json:"ver"`
}
)
func fillVersions(event *Event, baseUrl string) string {
var finalUrl string = baseUrl
for index, value := range event.Versions {
restUrl := fmt.Sprintf("Version%d=%s-%s", index + 1, value.Name, value.Ver)
finalUrl = fmt.Sprintf(
finalUrl + "%s" + "&",
restUrl,
)
}
return strings.TrimRight(finalUrl, "&")
}
func main() {
var event Event
json.Unmarshal([]byte(jsonData), &event)
baseUrl := fmt.Sprintf(
"https://test.com/test?Id=%s&Title=%s&Description=%s&",
event.Id,
event.Title,
event.Description,
)
finalUrl := fillVersions(&event, baseUrl)
fmt.Println(finalUrl)
}
程序的输出如下:
https://test.com/test?Id=101&Title=This is simple Golang title for testing!&Description=Sample code for REST api implementation in Golang 2021!&Version1=pingPong-10.2&Version2=Ninja-10.24
我还想说最后一个&会被删除,如果你不想这样做,删除以下行并编写如下(同时从导入范围中删除字符串库):
return strings.TrimRight(finalUrl, "&") // remove this
return finalUrl // add this
推荐阅读
- python - 将字典转换为数据框,其中键和值都有自己的列
- python - 替换 tensorflow v2 的占位符
- scala - ScalaTest:快速入门代码因 java.lang.NoClassDefFoundError 失败:scala/xml/NamespaceBinding
- python - Pycharm没有看到定义的东西
- netsuite - NetSuite Advanced PDF - 多选子记录中的链接数据
- c++ - “之前强烈地发生过”是什么意思?
- python - 如何动态查找使用 PyInstaller 编译的 exe 的路径?
- google-drive-api - gdrive 命令行 oauth2:无法获取令牌:400 错误请求
- java - 不断消费的 JMS 消息
- node.js - 无法在使用 oracledb npm 的 nodejs typescript 类的开玩笑单元测试中模拟 oracledb.getConnection()