首頁  >  文章  >  後端開發  >  如何根據程式碼解組任意節中的 JSON 資料?

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

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-10-31 21:27:02998瀏覽

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中文網其他相關文章!

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