任意の JSON データのアンマーシャリング
質問:
JSON データをある方法でマーシャリングできますか部分またはセクションでアンマーシャルできるようにするにはどうすればよいですか?このシナリオでは、データの上半分は、下半分のデータのタイプを示す「コード」を定義します。これは構造体間で異なる場合があります。 Go ではどのようにしてこれを実現できますか?
答え:
下半分が構造体間で異なる可能性がある任意の JSON データをアンマーシャリングするには、下半分の解析を遅らせることができます。上半分の「コード」は既知です。
実装:
コード例:
<code class="go">package main import ( "encoding/json" "fmt" ) type Message struct { Code int Payload json.RawMessage } type Range struct { Start int End int } type User struct { ID int Pass int } func MyUnmarshall(m []byte) { var message Message var payload interface{} json.Unmarshal(m, &message) switch message.Code { case 3: payload = new(User) case 4: payload = new(Range) } json.Unmarshal(message.Payload, payload) fmt.Printf("\n%v%+v", message.Code, payload) } 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 データをアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。