[英]How can I ignore root JSON Element in go?
我想将以下JSON序列化为map [string]字符串,其中包含map [“Name”] ==“Value”
{
"Item": {
"tags": {
"Name": "Value"
}
}
}
但是,我希望不必为“item”创建一个带有一个字段的支柱。 是否可以忽略类似于Java / Jackson的根JSON元素: mapper.configure(DeserializationFeature.UNWRAP_ROOT_VALUE, true);
我到目前为止最好的是:
items := make(map[string]map[string]string)
items := items["Item"]
我会做一个小助手,跳过围绕以下几行的结构的根:
func SkipRoot(jsonBlob []byte) json.RawMessage {
var root map[string]json.RawMessage
if err := json.Unmarshal(jsonBlob, &root); err != nil {
panic(err)
}
for _, v := range root {
return v
}
return nil
}
然后像这样使用它:
json.Unmarshal(SkipRoot(jsonBlob), &items)
这里有完整的例子: 游乐场
很不幸的是,不行。
encoding/json
包没有任何允许您忽略根元素的功能。 最简单的方法是使用你提到的那些不需要的结构:
type Root struct {
Item Item
}
type Item struct {
Tags map[string]string
}
这是一个完整的工作示例:
package main
import (
"encoding/json"
"fmt"
)
type Root struct {
Item Item
}
type Item struct {
Tags map[string]string
}
var data = []byte(`{
"Item": {
"tags": {
"Name": "Value"
}
}
}`)
func main() {
var s Root
if err := json.Unmarshal(data, &s); err != nil {
panic(err)
}
tags := s.Item.Tags
fmt.Printf("%+v", tags)
}
产量
图[名称:值]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.