首页 >后端开发 >Golang >如何将具有已知和未知键/值对的 JSON 解析为 Go 结构?

如何将具有已知和未知键/值对的 JSON 解析为 Go 结构?

DDD
DDD原创
2024-10-28 02:13:30475浏览

How to Parse JSON with Known and Unknown Key/Value Pairs into a Go Struct?

使用任意键/值对解组 JSON 到结构

问题

如何解析具有已知和未知键/值对的 JSON 字符串进入 Go 结构体?未知字段可以具有任何名称和值类型(字符串、布尔、float64 或 int)。

解决方案

使用已知字段和未知字段的映射切片创建一个结构体:

<code class="go">type Message struct {
    Known1   string `json:"known1"`
    Known2   string `json:"known2"`
    Unknowns []map[string]interface{}
}</code>

将 JSON 字符串解组到此结构中:

<code class="go">json.Unmarshal([]byte(jsonMsg), &msg)</code>

Unknowns 字段将包含表示未知键/值对的映射列表。

替代方案

  1. 双重解组:

    • 首先,解组为仅包含已知字段的临时结构。
    • 然后,再次解组到 map[string]interface{} 并手动提取未知值。
  2. 解组和类型转换:

    • 解组为映射[string]接口{}。
    • 迭代映射并将值断言为适当的类型。

注意事项

所有三种解决方案都是有效的,但最简单、最优雅的是最初的基于结构的方法。它避免了额外的解组或手动类型转换的需要。

以上是如何将具有已知和未知键/值对的 JSON 解析为 Go 结构?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn