首页 > 后端开发 > Golang > 如何在 Go 中解组具有混合数据类型的 JSON 数组?

如何在 Go 中解组具有混合数据类型的 JSON 数组?

Barbara Streisand
发布: 2024-12-14 05:00:09
原创
351 人浏览过

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

解组不同类型的数组

在 JSON 处理中,解组具有不同元素类型的数组可能具有挑战性。本文解决了对由已知但未排序数据类型的元素组成的数组进行解组的问题。

Go 的任意数据解码方法

如 Go 的 JSON 官方文档中所述编码后,可以使用 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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板