首页  >  文章  >  后端开发  >  如何根据代码解组任意节中的 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