ホームページ >バックエンド開発 >Golang >Go でデータ型が混在した JSON 配列をアンマーシャリングするにはどうすればよいですか?

Go でデータ型が混在した JSON 配列をアンマーシャリングするにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-14 05:00:09356ブラウズ

How Can I Unmarshal a JSON Array with Mixed Data Types in Go?

多様な型の配列のアンマーシャリング

JSON 処理では、さまざまな要素型を持つ配列のアンマーシャリングが困難な場合があります。この記事では、既知だがソートされていないデータ型を持つ要素で構成される配列のアンマーシャリングの問題について説明します。

任意のデータをデコードするための Go のメソッド

JSON に関する Go の公式ドキュメントで概要が説明されています。エンコードを行うと、json.Unmarshal 関数を使用して任意のデータをインターフェースにデコードできます。{}型アサーションを使用すると、データ型を動的に決定できます。

コードの適応

次のコードの修正バージョンは、このアプローチを示しています。

package main

import (
    "encoding/json"
    "fmt"
)

var my_json string = `{
    "an_array":[
    "with_a string",
    {
        "and":"some_more",
        "different":["nested", "types"]
    }
    ]
}`

func IdentifyDataTypes(f interface{}) {
    switch vf := f.(type) {
    case map[string]interface{}:
        fmt.Println("is a map:")
        for k, v := range vf {
            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)
                IdentifyDataTypes(v)
            }

        }
    case []interface{}:
        fmt.Println("is an array:")
        for k, v := range vf {
            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)
                IdentifyDataTypes(v)
            }

        }
    }
}

func main() {

    fmt.Println("JSON:\n", my_json, "\n")

    var f interface{}
    err := json.Unmarshal([]byte(my_json), &f)
    if err != nil {
        fmt.Println(err)
    } else {
        fmt.Printf("JSON: ")
        IdentifyDataTypes(f)
    }
}

出力

コードは次を生成します出力:

JSON:
 {
    "an_array":[
    "with_a string",
    {
        "and":"some_more",
        "different":["nested", "types"]
    }
    ]
}

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"

このアプローチにより、配列内の要素タイプの動的な識別と処理が可能になり、アンマーシャリングのニーズに合わせた多用途のソリューションが提供されます。

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

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。