首頁 > 後端開發 > Golang > 主體

如何根據程式碼解組任意節中的 JSON 資料?

Mary-Kate Olsen
發布: 2024-10-31 21:27:02
原創
1013 人瀏覽過

How to Unmarshall Arbitrary JSON Data in Sections Based on a Code?

解編 JSON 中的任意資料

在某些情況下,可能需要分段或部分解編 JSON 資料。例如,資料的上半部可能指示要在下半部執行的操作,例如根據上半部的「程式碼」解組到特定結構。

考慮以下範例結構:

<code class="go">type Range struct {
    Start int
    End   int
}

type User struct {
    ID    int
    Pass  int
}</code>
登入後複製

舉個例子,JSON 資料可能類似於以下內容:

<code class="json">// Message with "Code" 4, signifying a Range structure
{
    "Code": 4,
    "Payload": {
        "Start": 1,
        "End": 10
    }
}

// Message with "Code" 3, signifying a User structure
{
    "Code": 3,
    "Payload": {
        "ID": 1,
        "Pass": 1234
    }
}</code>
登入後複製

為了實現這種解組,我們可以延遲解析JSON 資料的下半部分,直到我們確定上半部分的程式碼。請考慮以下方法:

<code class="go">import (
    "encoding/json"
    "fmt"
)

type Message struct {
    Code    int
    Payload json.RawMessage // Delay parsing until we know the code
}

func MyUnmarshall(m []byte) {
    var message Message
    var payload interface{}
    json.Unmarshal(m, &message) // Delay parsing until we know the color space
    switch message.Code {
    case 3:
        payload = new(User)
    case 4:
        payload = new(Range)
    }
    json.Unmarshal(message.Payload, payload) // Error checks omitted for readability
    fmt.Printf("\n%v%+v", message.Code, payload) // Perform actions on the data
}

func main() {
    json := []byte(`{"Code": 4, "Payload": {"Start": 1, "End": 10}}`)
    MyUnmarshall(json)
    json = []byte(`{"Code": 3, "Payload": {"ID": 1, "Pass": 1234}}`)
    MyUnmarshall(json)
}</code>
登入後複製

透過使用此方法,您可以根據指定的程式碼有效地按節解組任意 JSON 資料。

以上是如何根據程式碼解組任意節中的 JSON 資料?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!