首頁 >後端開發 >Golang >如何使用型別斷言高效解析 GoLang 中的巢狀 JSON?

如何使用型別斷言高效解析 GoLang 中的巢狀 JSON?

Patricia Arquette
Patricia Arquette原創
2024-11-26 08:06:12469瀏覽

How to Efficiently Parse Nested JSON in GoLang Using Type Assertion?

在 GoLang 中循環巢狀 JSON

需要從巢狀 JSON 結構中擷取鍵值對以進行動態處理。為了有效地遍歷此結構,建議使用以下方法:

在範圍循環中使用類型斷言

根據回應中提供的,可以使用類型斷言迭代存取和處理嵌套JSON 物件的內容。以下範例程式碼示範了這種方法:

package main

import (
    "encoding/json"
    "fmt"    
)

func main() {
    // Create a map for the JSON data
    m := map[string]interface{}{}
    
    // Unmarshal the JSON input into the map
    err := json.Unmarshal([]byte(input), &m)
    if err != nil {
        panic(err)
    }

    // Recursively parse the map
    parseMap(m)
}

func parseMap(aMap map[string]interface{}) {
    for key, val := range aMap {
        switch concreteVal := val.(type) {
        case map[string]interface{}:
            fmt.Println(key)
            parseMap(concreteVal)
        case []interface{}:
            fmt.Println(key)
            parseArray(concreteVal)
        default:
            fmt.Println(key, ":", concreteVal)
        }
    }
}

func parseArray(anArray []interface{}) {
    for i, val := range anArray {
        switch concreteVal := val.(type) {
        case map[string]interface{}:
            fmt.Println("Index:", i)
            parseMap(concreteVal)
        case []interface{}:
            fmt.Println("Index:", i)
            parseArray(concreteVal)
        default:
            fmt.Println("Index", i, ":", concreteVal)
        }
    }
}

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

在此程式碼中,parseMap 和 parseArray 函數遞歸遍歷巢狀的 JSON 結構,以分層方式列印鍵值對。這種方法提供了一種通用的機制來存取和處理 JSON 數據,無論其複雜性如何。

以上是如何使用型別斷言高效解析 GoLang 中的巢狀 JSON?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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