如何在Golang中以“@”开头的json对象

时间:2017-01-26 14:40:25

标签: json go

如何以“@”开头的json对象:

{ 
 ...   
 "@meta": {
        "serverTimeMs": 114,
        "requestId": "F45FDGH35HF7"
      }
 ...
}

2 个答案:

答案 0 :(得分:2)

如果要将其解组成结构,可以使用标记指定json密钥的名称:

type data struct {
  Meta map[string]interface{} `json:"@meta"`
}

示例代码:https://play.golang.org/p/ts6QJac8iH

答案 1 :(得分:2)

encoding/json包使用标签来描述编组/解组json对象。所以你应该在一个结构上定义一个描述json obj的标签来解组它。 reflect包使用StructTag类型

的标记
  

按照惯例,标记字符串是可选的以空格分隔的键的串联:" value"对。每个键都是一个非空字符串,由空格以外的非控制字符组成(U + 0020''),引用(U + 0022'"'),和冒号(U + 003A':')。每个值都使用U + 0022'"'字符和Go字符串文字语法。

Tag usage example

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中将所有结构字段都导出(即以大写字母开头)。