如何以“@”开头的json对象:
{
...
"@meta": {
"serverTimeMs": 114,
"requestId": "F45FDGH35HF7"
}
...
}
答案 0 :(得分:2)
如果要将其解组成结构,可以使用标记指定json密钥的名称:
type data struct {
Meta map[string]interface{} `json:"@meta"`
}
答案 1 :(得分:2)
encoding/json
包使用标签来描述编组/解组json对象。所以你应该在一个结构上定义一个描述json obj的标签来解组它。 reflect
包使用StructTag
类型
按照惯例,标记字符串是可选的以空格分隔的键的串联:" value"对。每个键都是一个非空字符串,由空格以外的非控制字符组成(U + 0020''),引用(U + 0022'"'),和冒号(U + 003A':')。每个值都使用U + 0022'"'字符和Go字符串文字语法。
type TargetsResult struct {
Meta map[string]interface{} `json:"@meta"`
}
func main() {
var results TargetsResult
input := `{ "@meta": { "serverTimeMs": 114, "requestId": "F45FDGH35HF7" } }`
if err := json.Unmarshal([]byte(input), &results); err != nil {
fmt.Print(err)
}
fmt.Printf("%+v\n", results)
}
注意,json
使用reflect
作为标记,以便能够在reflect
中将所有结构字段都导出(即以大写字母开头)。