>백엔드 개발 >Golang >Go에서 데이터 유형이 혼합된 JSON 배열을 어떻게 역마샬링할 수 있나요?

Go에서 데이터 유형이 혼합된 JSON 배열을 어떻게 역마샬링할 수 있나요?

Barbara Streisand
Barbara Streisand원래의
2024-12-14 05:00:09352검색

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.