当前位置: 首页 > 知识库问答 >
问题:

如何将具有未知字段名的JSON解组为struct〔duplicate〕

齐鹏程
2023-03-14

是否可以用未知字段散集JSON?该字段名总是不同的,但结构是相同的。JSON是POST请求的结果。

我的代码:

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[]}
}

共有1个答案

谭晓博
2023-03-14

如果您不知道键,只需使用 map,映射的值类型可能是描述结构的结构:

type mData struct {
    KnownField1 [][5]int `json:"known_field_1"`
    KnownField2 [][5]int `json:"known_field_2"`
    KnownField3 [][5]int `json:"known_field_3"`
}

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

解组代码:

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)
}

输出(在Go Playground上尝试):

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嵌套动态结构去解码

 类似资料:
  • 问题内容: 是否可以解组未知字段的JSON?该字段名称始终是不同的,但是结构是相同的。JSON是POST请求的结果。 我的代码: 问题答案: 如果您不知道键,只需使用一个映射,并且映射的值类型可能是描述该结构的结构: 请注意,您必须导出字段才能使用此功能! 和解编代码: 输出(在Go Playground 上尝试):

  • 我有以下 JSON 我知道它有“a”和“b”字段,但我不知道其他字段的名称。所以我想以以下类型散集它: 我该怎么做?

  • 问题内容: 我在这里分叉了一个很棒的项目,并且刚刚学习了一些东西,就把它弄乱了。我不知道的问题是有关自定义编组的一些问题,如果您在这里看到,您可以看到它解组了包含一个字段的结构,然后使用该字段将其解组。除了嵌套的情况,这一切都很好。因此,最好的例子是: 只需说您有一个善意的结构是a ,那么就可以将其编组。然后具有3个保留在字段中的类型。这些孩子最终成为我的问题类型。我如何才能解决嵌套数据的问题?这

  • 问题内容: 我有与此类似的JSON: 我创建了一些类来映射这个json 而Model1类是仅包含String字段的简单类。 但这是行不通的。 编辑:JSON格式如下所示: 问题答案: Gson 2.0+的解决方案 我刚刚了解到,使用更新的Gson版本,这非常简单: 创建的对象是一个Map(com.google.gson.internal.LinkedTreeMap),如果你打印它,它看起来像这样:

  • 问题内容: 当JSON不是“期望”格式时,我发现GOLANG中的编组和拆组非常混乱。例如,在JSON配置文件(我正尝试与Viper一起使用)中,我有一个配置文件,看起来像: 其中“事物”可能是另一个对象中的一个对象n向下移动,我有一个struct: 我该如何解组JSON,更具体地说是解编viper配置(使用viper.Get(“ things”))来获得类似数组: 我尤其不确定如何将密钥作为结构字

  • 问题内容: 我已经开始在golang中工作,我正在尝试解析JSON字符串以构建结构,但无法正常工作。 JSON字符串: 每日”:[{“ userAccessToken”:“ acessToken”,“ uploadStartTimeInSeconds”:1499744832,“ uploadEndTimeInSeconds”:1499744832,“ callbackURL”:“ callback