使用golang jsonparser迭代元素数组值?

3vpjnl9f  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(103)

我正在编写一个简单的应用程序来测试使用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"],
      }
    }
  ]

3pvhb19x

3pvhb19x1#

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)

字符串

相关问题