構造が不明なネストされた JSON のアンマーシャリング
構造が定義されていないネストされた JSON データに遭遇した場合、アンマーシャリングの課題を軽減するためのアプローチがいくつかあります。
アンマーシャルの繰り返しを避ける
アンマーシャル操作を最小限に抑えることは、一般的に推奨されます。将来の使用に備えてアンマーシャリングされたオブジェクトを保存し、繰り返しのアンマーシャリングを避けるために、キャッシュ メカニズムを実装することを検討してください。ただし、場合によっては、特にさまざまな型のネストされた構造を扱う場合、複数のアンマーシャリングが必要になることがあります。
アンマーシャリングのための正しい構造の決定
メソッド1: マップ[文字列]インターフェースへのアンマーシャル{}
json.RawMessage をマップ[文字列]インターフェース{}へアンマーシャルします。これにより、ネストされた構造を調べて型を特定し、その後アンマーシャリングする正しい構造体を特定できるようになります。
例:
<code class="go">var objMap map[string]interface{} json.Unmarshal(rawMessage, &objMap)</code>
方法 2 : 正規表現一致
正規表現を使用して、JSON データ内の型文字列と一致します。型がわかったら、リフレクションまたは型スイッチを使用して、対応する構造体にアンマーシャリングします。
例:
<code class="go">type Regex *regexp.Regexp // Split the JSON data into key-value pairs type KeyValue struct { Key string Value string } // Regex for extracting the type var typeRE = Regex(regexp.MustCompile(`(?m)^.*"type": "(.+)".*$`)) // Unmarshal the raw message and extract the type func getType(rawMessage []byte) (string, error) { var data KeyValue err := json.Unmarshal(rawMessage, &data) if err != nil { return "", err } matches := typeRE.FindStringSubmatch(data.Value) return matches[1], nil }</code>
コピーまたは通常の使用式のアプローチ
方法 A: コピーとアンマーシャル
方法 B: 正規表現とアンマーシャル
以上が構造を知らずにネストされた JSON データをアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。