ホームページ > バックエンド開発 > Golang > 異種のデータ型を持つ Go 配列をアンマーシャリングするにはどうすればよいですか?

異種のデータ型を持つ Go 配列をアンマーシャリングするにはどうすればよいですか?

Patricia Arquette
リリース: 2024-12-14 02:28:09
オリジナル
629 人が閲覧しました

How to Unmarshal a Go Array with Disparate Data Types?

Go での異種型の配列のアンマーシャリング

キーと値のペアを処理する場合、アンマーシャリングは簡単です。ただし、混合型の配列を個別の順序でアンマーシャリングすることには課題が伴います。この問題を解決するには、さまざまなデータ型に柔軟に対応できるソリューションが必要です。

Go プログラミング言語は、このシナリオを処理するための洗練されたオプションを提供します。型アサーションと組み合わせてインターフェイス{} 型を活用することで、各配列要素の基になる型を動的に分析し、それに応じてアンマーシャリングできます。

問題のあるコードを再検討し、この手法を活用するように修正してみましょう。

package main

import (
    "encoding/json"
    "fmt"
)

func decodeJSON(f interface{}) {
    switch vf := f.(type) {
    case map[string]interface{}:
        fmt.Println("is a map:")
        for k, v := range vf {
            checkTypeAndDecode(k, v)
        }
    case []interface{}:
        fmt.Println("is an array:")
        for k, v := range vf {
            checkTypeAndDecode(k, v)
        }
    }
}

func checkTypeAndDecode(k string, v interface{}) {
    switch vv := v.(type) {
    case string:
        fmt.Printf("%v: is string - %q\n", k, vv)
    case int:
        fmt.Printf("%v: is int - %q\n", k, vv)
    default:
        fmt.Printf("%v: ", k)
        decodeJSON(v)
    }
}

func main() {
    my_json := `{
    "an_array":[
    "with_a string",
    {
        "and":"some_more",
        "different":["nested", "types"]
    }
    ]
}`

    var f interface{}
    err := json.Unmarshal([]byte(my_json), &f)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Println("JSON:")
        decodeJSON(f)
    }
}
ログイン後にコピー

この変更されたコードは、decodeJSON 関数を使用して JSON 構造を再帰的に分析し、各要素のデータ型を識別し、適切なデータを出力します。表現。複雑なネストされた構造の場合、decodeJSON へのネストされた呼び出しが実行されます。

この改訂されたコードによって生成された出力は、各要素がデータ型に基づいてどのように正しく識別され、出力されるかを示しています。

JSON:
is a map:
an_array: is an array:
0: is string - "with_a string"
1: is a map:
and: is string - "some_more"
different: is an array:
0: is string - "nested"
1: is string - "types"
ログイン後にコピー

With Go での型処理の理解が深まったことで、異種混合のデータ型を含む配列を自信を持ってアンマーシャリングできるようになり、システム内での正確で一貫したデータ表現が保証されます。アプリケーション。

以上が異種のデータ型を持つ Go 配列をアンマーシャリングするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート