ホームページ  >  記事  >  バックエンド開発  >  共通インターフェースを使用して JSON をフィールドにアンマーシャリングする方法

共通インターフェースを使用して JSON をフィールドにアンマーシャリングする方法

PHPz
PHPz転載
2024-02-09 16:51:18299ブラウズ

如何使用通用接口将 JSON 解组为字段

php エディタ Xinyi では、共通インターフェイスを使用して JSON をフィールドにアンマーシャリングする方法を紹介します。開発では、データを簡単に操作および処理できるように、受信した JSON データをフィールドに解析する必要があることがよくあります。汎用インターフェイスは、この目標を達成するためのシンプルかつ柔軟な方法を提供します。共通インターフェイスを使用すると、JSON データを含む文字列をアンマーシャリング メソッドに渡し、後続の処理のために解析されたフィールドを取得できます。この方法はシンプルで使いやすいだけでなく、さまざまなタイプの JSON データ解析にも適しています。共通のインターフェイスを使用して JSON をフィールドにアンマーシャリングする方法を学びましょう。

質問の内容

次の構造を持つ汎用応答オブジェクトがあります:

リーリー

data このタイプはインターフェイスであり、多くの実装 (pingresponse など) があります。 response をその基になる型にアンマーシャリングするにはどうすればよいですか?完全な例は次のとおりです。常にエラー error: json: can unmarshal object into go struct field response.data of type main.data が発生します。 :

type response struct {
    data          data   `json:"data"`
    error         string `json:"error,omitempty"`
    nextpagetoken string `json:"next_page_token,omitempty"`
}

回避策

どの具象型にアンマーシャリングするかを encoding/json に指示する必要があります。このパッケージではこれを行うことはできません。

typea および typeb が次のように定義されていると仮定します。 リーリー

この場合、どの型にアンマーシャルするかを決定することは不可能です。

あなたの例に関しては、次のようにアンマーシャリングする型を

encoding/json に伝えることができます。 リーリー 事前に型がわからない場合は、

map[string]interface{}

: にマーシャリングできます。 リーリー そして次のようにタイプを決定します:

リーリー

別の解決策は、型情報を json に埋め込むことです:

リーリー

次に、

response.type

の値に基づいて response.data をデコードします。 encoding/json で提供される例を参照してください: https://pkg.go.dev/encoding/json#example-rawmessage-unmarshal

以上が共通インターフェースを使用して JSON をフィールドにアンマーシャリングする方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。