「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > Go でデータ型が混在した JSON 配列をアンマーシャリングする方法

Go でデータ型が混在した JSON 配列をアンマーシャリングする方法

2024 年 12 月 22 日に公開
ブラウズ:851

How to Unmarshal JSON Arrays with Mixed Data Types in Go?

データ型が混在した JSON 配列のアンマーシャリング

さまざまなデータ型の値を含む JSON 配列をアンマーシャリングするタスクは、多くの場合、課題となることがあります。たとえば、次の JSON 配列について考えてみましょう:

{["NewYork",123]}

Issue:

まず、重要な点に注意してください。提供された JSON が構文的に間違っていることを示します。 JSON オブジェクトには各値のキーが必要なので、正しい表現は {"key":["NewYork",123]} または単に ["NewYork",123] になります。さらに、JSON を扱う場合は、複数のデータ型で構成される配列では、Go 配列が指定された型を必要とするときに問題が発生します。このような状況にどう対処すればよいのか疑問に思うかもしれません。

解決策:

この問題に取り組む鍵となるのは、型インターフェースを採用することです。{}これにより、明示的な型変換を必要とせずに、さまざまな型の値を処理できるようになります。これがどのように機能するかを示すコード例を次に示します。

import ( 「エンコーディング/json」 「fmt」 ) const j = `{"NYC": ["ニューヨーク",123]}` 型 UntypedJson マップ[文字列][]インターフェイス{} 関数 main() { ut := UntypedJson{} fmt.Println(json.Unmarshal([]byte(j), &ut)) fmt.Printf("%#v", ut) }

import (
    "encoding/json"
    "fmt"
)

const j = `{"NYC": ["NewYork",123]}`

type UntypedJson map[string][]interface{}

func main() {
    ut := UntypedJson{}
    fmt.Println(json.Unmarshal([]byte(j), &ut))
    fmt.Printf("%#v", ut)
}

プログラムの出力は次のようになります。

map[string][]interface{}{"NYC": \["NewYork" 123]}

<nil>
map[string][]interface{}{"NYC": \["NewYork" 123]}
結論:

インターフェイス タイプを活用することで、{}このアプローチにより、さまざまなデータ型を含む JSON 配列を効果的にアンマーシャリングできるようになります。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3