>  기사  >  백엔드 개발  >  JSON 역직렬화에서 인터페이스 어설션 오류가 발생하는 이유는 무엇입니까?

JSON 역직렬화에서 인터페이스 어설션 오류가 발생하는 이유는 무엇입니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2024-11-27 06:41:09334검색

Why Does My JSON Deserialization Throw an Interface Assertion Failure?

JSON 역직렬화 중 인터페이스 어설션 실패

문제:

이후 특정 구조체 유형에 대한 인터페이스를 어설션하려고 할 때 JSON에서 역직렬화하면 인터페이스가 예상한 것과 다르다는 오류가 발생합니다. 유형.

특정 오류:

panic: interface conversion: interface {} is map[string]interface {}, not main.Data

세부 정보:

코드가 JSON 데이터를 인터페이스로 역직렬화하려고 시도합니다. 그런 다음 인터페이스를 데이터 구조체에 어설션합니다. 그러나 런타임 시 Go는 인터페이스가 데이터 객체가 아닌 map[string]인터페이스{}일 것으로 예상합니다.

해결책:

올바른 인터페이스 주장:

인터페이스는 임의의 구조체 유형으로 주장될 수 없습니다. 인터페이스가 나타내는 올바른 유형으로 어설션되어야 합니다. 이 경우 인터페이스는 해당 유형의 값이 처음 할당된 경우에만 데이터 구조체에 어설션될 수 있습니다.

직접 언마샬링:

인터페이스 어설션이 필요하지 않도록 하려면 다음과 같이 하세요. JSON 데이터를 원하는 구조체 유형으로 직접 역마샬링하는 것이 좋습니다. 이렇게 하면 중간 어설션 없이 데이터가 올바르게 변환됩니다.

코드 예:

type Data struct {
    Content string
    Links   []string
}

func main() {
    var AData Data

    // Deserialize JSON directly into the Data struct
    err = json.Unmarshal([]byte(value), &AData)
    if err != nil {
        panic(err)
    }
}

JSON 데이터를 AData 구조로 직접 역마샬링하여, 인터페이스 어설션의 필요성이 제거되어 적절한 데이터 변환이 보장됩니다.

위 내용은 JSON 역직렬화에서 인터페이스 어설션 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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