首頁 > 後端開發 > Golang > 在不知道其結構的情況下如何解組嵌套的 JSON 資料?

在不知道其結構的情況下如何解組嵌套的 JSON 資料?

Patricia Arquette
發布: 2024-11-02 16:55:03
原創
466 人瀏覽過

How can I unmarshal nested JSON data without knowing its structure?

在沒有已知結構的情況下解組嵌套JSON

當遇到沒有定義結構的嵌套JSON 資料時,嵌套有多種方法可以緩解解組中的挑戰。

避免重複解組

通常建議盡量減少解組操作。考慮實作快取機制來儲存未編組的物件以供日後使用,並避免重複的編組。然而,在某些情況下,可能需要多次解組,尤其是在處理不同類型的巢狀結構時。

確定解組的正確結構

方法1:解組到map[string]interface{}

將json.RawMessage解組到map[string]interface{}。這允許檢查嵌套結構以識別類型,並隨後識別要解組到的正確結構。

範例:

<code class="go">var objMap map[string]interface{}
json.Unmarshal(rawMessage, &objMap)</code>
登入後複製

方法2 :正規表示式符合

使用正規資料表達式來符合JSON中的類型字串。一旦知道類型,請使用反射或類型開關將其解組到相應的結構中。

範例:

<code class="go">type Regex *regexp.Regexp

// Split the JSON data into key-value pairs
type KeyValue struct {
    Key   string
    Value string
}

// Regex for extracting the type
var typeRE = Regex(regexp.MustCompile(`(?m)^.*"type": "(.+)".*$`))

// Unmarshal the raw message and extract the type
func getType(rawMessage []byte) (string, error) {
    var data KeyValue
    err := json.Unmarshal(rawMessage, &data)
    if err != nil {
        return "", err
    }
    matches := typeRE.FindStringSubmatch(data.Value)
    return matches[1], nil
}</code>
登入後複製

使用複製或常規表達式方法

A:複製和解組

  1. 建立json.RawMessage 的副本。
  2. 解組副本轉換為 interface{} 來辨識類型。
  3. 將原始 json.RawMessage 解組到確定型別的結構中。

方法 B:正規表示式和解組

  1. 使用正規表示式決定型別。
  2. 使用反射或類型開關建立具有確定類型的結構體的新實例。
  3. 將 json.RawMessage 解組到新建立的結構中。

以上是在不知道其結構的情況下如何解組嵌套的 JSON 資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板