首頁 >後端開發 >Golang >如何在 Go 中高效地迭代巢狀 JSON?

如何在 Go 中高效地迭代巢狀 JSON?

Patricia Arquette
Patricia Arquette原創
2024-11-26 10:46:11609瀏覽

How to Efficiently Iterate Through Nested JSON in Go?

在Go Lang 中循環/迭代第二級嵌套JSON

考慮遇到如下所示的嵌套JSON 結構的場景:

{
    "outterJSON": {
        "innerJSON1": {
            "value1": 10,
            "value2": 22,
            "InnerInnerArray": [ "test1" , "test2"],
            "InnerInnerJSONArray": [ {"fld1" : "val1"} , {"fld2" : "val2"} ]
        },
        "InnerJSON2":"NoneValue"
    }
}

任務是有效地迭代此結構並將所有鍵值對作為字串檢索以進行進一步處理。不幸的是,為這樣的動態 JSON 輸入手動定義結構是不可行的。

高效迭代方法

為了有效地應對這一挑戰,採用了遞歸方法:

func parseMap(m map[string]interface{}) {
  for key, val := range m {
    // Check the type of the value
    switch concreteVal := val.(type) {
      case map[string]interface{}:
        // If it's a nested map, recursively call the function
        parseMap(val.(map[string]interface{}))
      case []interface{}:
        // If it's a nested array, call the function to parse the array
        parseArray(val.([]interface{}))
      default:
        // For all other types, print the key and value as a string
        fmt.Println(key, ":", concreteVal)
    }
  }
}

這個遞歸函數 parseMap 檢查映射中每個值的類型。如果該值本身是一個映射,它會遞歸呼叫 parseMap 來遍歷該巢狀映射。如果該值是一個數組,它會呼叫 parseArray 來迭代它。對於所有其他類型(例如字串、數字等),它只是將鍵和值列印為字串。

示範

考慮前面提供的範例 JSON 輸入。運行下面的程式碼將產生以下輸出:

func parseArray(a []interface{}) {
  for i, val := range a {
    // Check the type of the value
    switch concreteVal := val.(type) {
      case map[string]interface{}:
        // If it's a nested map, recursively call the function
        parseMap(val.(map[string]interface{}))
      case []interface{}:
        // If it's a nested array, call the function to parse the array
        parseArray(val.([]interface{}))
      default:
        // For all other types, print the index and value as a string
        fmt.Println("Index:", i, ":", concreteVal)
    }
  }
}

const input = `
{
    "outterJSON": {
        "innerJSON1": {
            "value1": 10,
            "value2": 22,
            "InnerInnerArray": [ "test1" , "test2"],
            "InnerInnerJSONArray": [{"fld1" : "val1"} , {"fld2" : "val2"}]
        },
        "InnerJSON2":"NoneValue"
    }
}
`

輸出:

//outterJSON
//innerJSON1
//InnerInnerJSONArray
//Index: 0
//fld1 : val1
//Index: 1
//fld2 : val2
//value1 : 10
//value2 : 22
//InnerInnerArray
//Index 0 : test1
//Index 1 : test2
//InnerJSON2 : NoneValue

這種方法有效地捕獲嵌套JSON 中的所有鍵值對,使其適合處理和Go 語言中的提取任務。

以上是如何在 Go 中高效地迭代巢狀 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn