首頁 >後端開發 >Golang >如何在 Go 中解碼未知結構的 JSON?

如何在 Go 中解碼未知結構的 JSON?

Barbara Streisand
Barbara Streisand原創
2024-12-28 10:23:11363瀏覽

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