tag - golang string json unmarshal



마침내 골란의 소리가 들릴 겁니다 마샬이 오류를 되 돌리겠습니까? (2)

docs :

JSON은 순환 데이터 구조를 나타낼 수 없으며 마샬은이를 처리하지 않습니다. 주기 구조를 Marshal에 전달하면 무한 재귀가 발생합니다.

나는이 상황을 경험했다. 결과는 런타임 패닉을 초래한다.

내가 궁금해하는 점은 누군가 json.Marshal이 non-nil 오류를 반환하는 비 공황 상태를 나타내는 작업 프로그램을 제공 할 수 있는지 여부입니다. 가장 좋은 답변 에는 사용 된 입력분명히 포함됩니다 .

https://src-bin.com


Answer #1

Jonathan의 답변을 보완하기 위해 json.Marshal 함수는 UnsupportedTypeError 또는 UnsupportedValueError 의 두 가지 유형의 오류를 반환 할 수 있습니다.

Jonathan이 잘못된 유형을 마샬링하려고 시도하면서 말한 것처럼 첫 번째 문제가 발생할 수 있습니다.

_, err := json.Marshal(make(chan int))
_, ok := err.(*json.UnsupportedTypeError) // ok == true

반면에 마샬 함수가 잘못된 값을 전달하여 오류를 반환하도록 할 수도 있습니다.

_, err := json.Marshal(math.Inf(1))
_, ok := err.(*json.UnsupportedValueError) // ok == true

Answer #2

업데이트 : 이제 map [int] int 대신 채널을 사용하여 오류를 유도합니다.

특정 func 구조 (예 : func 또는 chan 가 직렬화를 거부합니다.

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    value := make(chan int)
    _, err := json.Marshal(value)
    fmt.Println(err)
}




marshalling