首页 >后端开发 >Golang >如何在 Go 中解码未知结构的 JSON?

如何在 Go 中解码未知结构的 JSON?

Barbara Streisand
Barbara Streisand原创
2024-12-28 10:23:11355浏览

How to Decode JSON with an Unknown Structure in Go?

用未知结构解码 JSON

在编程领域,JSON(JavaScript 对象表示法)通常用作表示数据的一种手段软件应用程序。然而,当遇到结构不熟悉的 JSON 时,提取特定信息可能会带来挑战。考虑以下场景:

您需要像这样处理 JSON 字符串:

{ 
  "votes": { 
    "option_A": "3" 
  } 
}

您的目标是通过包含“count”键来扩充此 JSON,从而产生以下输出:

{ 
  "votes": { 
    "option_A": "3" 
  }, 
  "count": "1" 
}

挑战来自于初始 JSON 的未知结构。传统方法,例如使用具有特定类型结构的 json.Unmarshal 函数,变得不适用。

解决方案:Unmarshal 到 Map

为了克服这个障碍,我们可以利用 Go 映射的灵活性。以下代码片段演示了如何将 JSON 解组到 map[string]interface{}:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    in := []byte(`{ 
      "votes": { 
        "option_A": "3" 
      } 
    }`)
    var raw map[string]interface{}
    if err := json.Unmarshal(in, &raw); err != nil {
        panic(err)
    }
    
    // Modify the map by adding the "count" key
    raw["count"] = 1
    
    // Marshal the modified map back to JSON
    out, err := json.Marshal(raw)
    if err != nil {
        panic(err)
    }
    
    fmt.Println(string(out))
}

通过将 JSON 解组到映射中,我们有效地创建了一个与类型无关的数据结构,可以容纳任何输入。它允许我们动态地访问和修改 JSON 内容,而不依赖于预定义的类型。

上述代码的最终输出如下:

{ 
  "votes": { 
    "option_A": "3" 
  }, 
  "count": "1" 
}

这种方法提供了一种方便灵活的方式用于解码未知结构的 JSON 的解决方案,使开发人员能够高效地提取和操作数据。

以上是如何在 Go 中解码未知结构的 JSON?的详细内容。更多信息请关注PHP中文网其他相关文章!

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