英文:
How to get json object beginning with "@" in Golang
问题
如何获取以“@”开头的 JSON 对象,例如:
{
...
"@meta": {
"serverTimeMs": 114,
"requestId": "F45FDGH35HF7"
}
...
}
英文:
How to get json object beginning with "@" like:
{
...
"@meta": {
"serverTimeMs": 114,
"requestId": "F45FDGH35HF7"
}
...
}
答案1
得分: 2
如果你想将其解组成一个结构体,你可以使用标签来指定 JSON 键的名称:
type data struct {
Meta map[string]interface{} `json:"@meta"`
}
示例代码:https://play.golang.org/p/ts6QJac8iH
英文:
If you want to unmarshal it into a struct you can use a tag to specify the name of the json key:
type data struct {
Meta map[string]interface{} `json:"@meta"`
}
example code: https://play.golang.org/p/ts6QJac8iH
答案2
得分: 2
encoding/json
包使用标签来描述JSON对象的编组和解组过程。因此,你应该在结构体上定义一个描述JSON对象的标签以进行解组。而reflect
包使用带有StructTag
类型的标签。
按照惯例,标签字符串是可选的以空格分隔的键:"值"对的串联。每个键是一个非空字符串,由非控制字符组成,除了空格(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
中使用,所有的结构体字段都必须是可导出的(即以大写字母开头)。
英文:
encoding/json
package uses tags to describe marshaling/unmarshaling json object. So you should define a tag describing json obj on a struct to unmarshal it. And reflect
package uses tags with StructTag
type
> By convention, tag strings are a concatenation of optionally space-separated key:"value" pairs. Each key is a non-empty string consisting of non-control characters other than space (U+0020 ' '), quote (U+0022 '"'), and colon (U+003A ':'). Each value is quoted using U+0022 '"' characters and Go string literal syntax.
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)
}
Note, json
uses reflect
for tags so to be able in reflect
all the struct fields must be exportable (i.e. start with uppercase letter).
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论