所以我正在制作一个Go服务来调用一个宁静的API,我无法控制我正在调用的API。
我知道Go在NewDecoder-> Decode中有一个很好的内置反序列化程序,但它只适用于以大写字母(又名公共字段)开头的结构字段。这引起了一个问题,因为我尝试使用的JSON看起来像这样:
{
"_next": "someValue",
"data": [{/*a collection of objects*/}],
"message": "success"
}
我如何映射"_next"
?
答案 0 :(得分:4)
使用tags在JSON中指定字段名称。您在上面发布的JSON对象可以建模如下:
type Something struct {
Next string `json:"_next"`
Data []interface{} `json:"data"`
Message string `json:"message"`
}
测试它:
func main() {
var sg Something
if err := json.Unmarshal([]byte(s), &sg); err != nil {
panic(err)
}
fmt.Printf("%+v", sg)
}
const s = `{
"_next": "someValue",
"data": ["one", 2],
"message": "success"
}`
输出(在Go Playground上尝试):
{Next:someValue Data:[one 2] Message:success}
另请注意,您也可以在地图或interface{}
值中解组,因此您甚至不必创建结构,但使用结构时不会像使用它一样方便:< / p>
func main() {
var m map[string]interface{}
if err := json.Unmarshal([]byte(s), &m); err != nil {
panic(err)
}
fmt.Printf("%+v", m)
}
const s = `{
"_next": "someValue",
"data": ["one", 2],
"message": "success"
}`
输出(在Go Playground上尝试):
map[_next:someValue data:[one 2] message:success]
答案 1 :(得分:0)
标签可以解决您的问题。
希望它可以帮助其他人来到这里,你可以利用https://mholt.github.io/json-to-go/生成Go结构。在左侧粘贴JSON结构,右侧将生成等效的Go类型,您可以将其粘贴到程序中。