当前位置: 首页 > 面试题库 >

如何解组未知字段名称的JSON以构造

段干开宇
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[]}
}

问题答案:

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

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


 类似资料:
  • 是否可以用未知字段散集JSON?该字段名总是不同的,但结构是相同的。JSON是POST请求的结果。 我的代码:

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

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

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

  • 问题内容: Jackson json注释中以下jax-b注释的等效方式是什么? 我需要生成json而不是xml,并且需要了解在jax-b中等效表示的常规jackson批注。 重命名字段。 使用getter代替字段。 如果json / xml元素名称是Java保留字(例如“ ”,“ ”,“ ”等),则这些功能尤其重要。 因此我们必须将POJO字段分别命名为“ new ”,“ _ public ”,“

  • 问题内容: 这是我在jQuery中的响应代码: 每个都是形式。 我希望访问javascript中的这两个数据位,如果我事先不知道例如什么,该怎么做? 问题答案: 使用检索键名的完整列表(阵列)。一个polyfill 在这里可用。 您问题的回答格式仅包含一对键值对。然后可以将代码简化为: 如果你没有在列表中感兴趣的话,使用循环 使用 。必须使用最后一种方法,以排除从原型继承的属性。