PHP エディタ Zimo の紹介によると、Golang の json.Unmarshal が JSON データを解析する際、フィールドが JSON に存在しない場合、ポインタ値は明示的に nil に設定されません。 。つまり、JSON にフィールドが欠落している場合でも、ポインターは元の値を保持しており、プログラムでエラーや例外が発生する可能性があります。したがって、json.Unmarshal を使用する場合は、プログラムの安定性と正確性を確保するために欠落フィールドの処理に特別な注意を払う必要があります。
次の例を考えてみましょう:
リーリーどの出力:
リーリー初めて json.Unmarshal
を実行すると、StructB が応答に表示され、正しくアンマーシャリングされます。しかし、これを 2 回目に行うと、フィールドが応答に表示されない場合、明示的に nil に設定されないようです。このフィールドが設定されていない構造体でこれを実行すると、それは nil に設定されます (または、明らかに何かに設定されていません) (3 番目の例に示すように)。
struct_b
を非 nil に設定した場合、struct_b
フィールドを含まない JSON 文字列を解析するときに 2 番目の json.Unmarshal
StructB
を明示的に nil に設定しますか?
それはできません。 json.Unmarshal
入力 JSON で表されていない構造フィールドは変更されません。空の構造体から始めるか、Unmarshal
を呼び出す前にフィールドを任意の値に設定します (JSON 入力にない場合)。
以上がGolang の json.Unmarshal は、フィールドが JSON に存在しない場合、ポインター値を明示的に nil に設定しません。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。