登录
首页 >  Golang >  Go问答

如何使用 golang jsonparser 在元素数组中迭代值?

来源:stackoverflow

时间:2024-02-06 08:51:20 482浏览 收藏

一分耕耘,一分收获!既然打开了这篇文章《如何使用 golang jsonparser 在元素数组中迭代值?》,就坚持看下去吧!文中内容包含等等知识点...希望你能在阅读本文后,能真真实实学到知识或者帮你解决心中的疑惑,也欢迎大佬或者新人朋友们多留言评论,多给建议!谢谢!

问题内容

我正在编写一个简单的应用程序来测试使用 golang 模块“buger/jsonparser”解析 json。

我能够浏览 json 结构,直到按下具有数组值的键。我不知道如何提取数组并查看它是否包含某个字符串。

我的代码如下,当我尝试打印数组元素中的值时,它给出“未知值类型”。我试图从“actions”键获取数组,以便我可以查看它是否包含一些特定的字符串,例如“更新”。

jsonparser.arrayeach(filebytes, func(value []byte, _ jsonparser.valuetype, _ int, err error) {
        if err != nil {
            log.fatal(err)
        }
        jsonparser.arrayeach(value, func(action []byte, _ jsonparser.valuetype, _ int, err error) {
            fmt.println(jsonparser.getstring(action))
        }, "change", "actions")
    }, "resource_drift")

我正在尝试解析的 json 示例

"resource_changes": [
    {
      "address": "azurerm_application_insights.main",
      "mode": "managed",
      "type": "azurerm_application_insights",
      "name": "main",
      "provider_name": "registry.terraform.io/hashicorp/azurerm",
      "change": {
        "actions": ["update"],
      }
    }
  ]

正确答案


import "encoding/json"
import "fmt"

jsonString := `"resource_changes": [
    {
      "address": "azurerm_application_insights.main",
      "mode": "managed",
      "type": "azurerm_application_insights",
      "name": "main",
      "provider_name": "registry.terraform.io/hashicorp/azurerm",
      "change": {
        "actions": ["update"],
      }
    }
  ]`

m := map[string]any{}
json.Unmarshal([]byte(jsonString), &m)

rc := m["resource_changes"].([]any)
first := rc[0].(map[string]any)
change := first["change"].(map[string]any)

fmt.Println(change)

今天关于《如何使用 golang jsonparser 在元素数组中迭代值?》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>