コードに基づいてセクション内の任意の JSON データをアンマーシャリングする方法

Mary-Kate Olsen
リリース: 2024-10-31 21:27:02
オリジナル
1076 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート