json - 如何将 json 解组为 Go 结构映射?
问题描述
我是 Go 新手,我很难处理 json 文件。我有 JSON 数据,我想将其转换为 map[string]*SomeStruct 类型的地图
示例 JSON:
{
"Component":
{
"fieldName": "component.name",
"fieldType": "STR"
},
"Collection": {
"fieldName": "collection",
"fieldType": "INT"
},
"OldgenUse" : {
"fieldName" : "oldgen.use",
"fieldType": "INT"
},
}
我想阅读 JSON 并构建这样的地图:
expcMetadata := map[string]*FieldMap{
"Component": {FieldName: "component.name", FieldType: "STR"},
"Collection": {FieldName: "collection", FieldType: "INT"},
"OldGenUse": {FieldName: "oldgen.use", FieldType: "INT"},
}
我能够解组为 map[string]interface{}。如何解组为 map[string]*FieldMap
我的代码给了我一张空地图:
type FieldMap struct {
FieldName string `json:"fieldName"`
FieldType string `json:"fieldType"`
}
type JSONType struct {
FieldSet map[string]FieldMap `json:"fields"`
}
func main() {
jsonFile, er := os.Open("fields.json")
if er != nil {
fmt.Println(er)
}
fmt.Println("Successfully Opened users.json")
defer jsonFile.Close()
byteValue, _ := ioutil.ReadAll(jsonFile)
// var m map[string]interface{}
var m JSONType
err := json.Unmarshal(byteValue, &m)
if err != nil {
log.Fatal(err)
}
fmt.Println(m)
}
如果有人可以帮助我解决这个问题,我将不胜感激。
解决方案
您的输入 JSON 是一个对象,因此直接将其编组到地图中。包装器JSONType
是不必要的。
var m map[string]FieldMap
err := json.Unmarshal(byteValue, &m)
if err != nil {
log.Fatal(err)
}
在Go Playground上查看一个工作示例,输出为:
map[Collection:{collection INT} Component:{component.name STR} OldgenUse:{oldgen.use INT}]
推荐阅读
- angular - 使用 angular 9 和 ngrx 进行表单数据编辑,引发错误
- flutter - 连续多个 WidgetSpan 不考虑方向性
- python - Django 只能通过命令行运行,但不能在 PyCharm 中运行
- vba - VBA:在 Word 中的拼写错误旁边编写拼写建议
- python-3.x - Pyglet 3.7 中的 Sprite 子类化
- python - 在 python 中手动创建训练和测试数据集
- woocommerce - Woocommerce 基于产品变体属性的新订单电子邮件的附加收件人
- python - 尝试使用 Python 的 Scrapy 包,但它在不应该的地方不断返回空值
- javascript - 创建相反字符串的对象
- php - 为什么 PHP 会为我的表格代码生成乱码 HTML?