首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将具有未知字段名的JSON解封为结构

如何将具有未知字段名的JSON解封为结构
EN

Stack Overflow用户
提问于 2018-03-19 12:10:41
回答 1查看 6.9K关注 0票数 3

是否有可能用未知字段解封JSON?字段名总是不同的,但结构是相同的。JSON是POST请求的结果。

我的代码:

代码语言:javascript
运行
复制
package main

import "fmt"
import "encoding/json"

var body = []byte(`{
    "unknown_field": {
            "known_field_1": [[1,2,3,4,5],[10,20,30,40,50],[100,200,300,400,500]],
            "known_field_2": [[11,21,31,41,51]],
            "known_field_3": [[12,22,32,42,52],[14,44,34,44,54]]
        }
}`)

type MyStruct struct {
    MainData map[string]mData `json:"-"`
}

type mData struct {
    knownField1 [][5]int `json:"known_field_1"`
    knownField2 [][5]int `json:"known_field_2"`
    knownField3 [][5]int `json:"known_field_3"`
}

func NewMyStruct() MyStruct {
    ms := MyStruct{}
    ms.MainData = make(map[string]mData)
    return ms
}

func main() {
    myStruct := NewMyStruct()
    if err := json.Unmarshal(body, &myStruct); err != nil {
        panic(err)
    }

    fmt.Println(myStruct) // gives {map[]}
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-19 12:16:08

如果您不知道键,那么只需使用一个映射,并且映射的值类型可能是描述结构的结构:

代码语言:javascript
运行
复制
type mData struct {
    KnownField1 [][5]int `json:"known_field_1"`
    KnownField2 [][5]int `json:"known_field_2"`
    KnownField3 [][5]int `json:"known_field_3"`
}

请注意,您必须导出这些字段才能工作!

以及解封送处理代码:

代码语言:javascript
运行
复制
var data map[string]mData
if err := json.Unmarshal(body, &data); err != nil {
    panic(err)
}

fmt.Println(data)
for k, v := range data {
    fmt.Println(k, v)
}

输出(在围棋游乐场)上尝试它)

代码语言:javascript
运行
复制
map[unknown_field:{[[1 2 3 4 5] [10 20 30 40 50] [100 200 300 400 500]] [[11 21 31 41 51]] [[12 22 32 42 52] [14 44 34 44 54]]}]
unknown_field {[[1 2 3 4 5] [10 20 30 40 50] [100 200 300 400 500]] [[11 21 31 41 51]] [[12 22 32 42 52] [14 44 34 44 54]]}

见有关问题:

如何在Golang中解析/分配动态JSON

解带未知字段的JSON

将json字符串解封到具有结构本身的一个元素的结构。

JSON嵌套动态结构Go解码

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49362653

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档