>  기사  >  백엔드 개발  >  후행 쉼표가 있는 JSON 배열을 구문 분석할 때 Go 코드에 런타임 오류가 발생하는 이유는 무엇입니까?

후행 쉼표가 있는 JSON 배열을 구문 분석할 때 Go 코드에 런타임 오류가 발생하는 이유는 무엇입니까?

DDD
DDD원래의
2024-10-28 08:13:29886검색

Why Does My Go Code Panic with a Runtime Error When Parsing a JSON Array with a Trailing Comma?

Go에서 후행 쉼표로 구문 분석하는 JSON 배열의 런타임 오류

Go의 유명한 전문가인 Dave Cheney는 복합 리터럴의 각 줄을 다음으로 끝내는 것이 중요하다고 강조합니다. 쉼표. 그러나 이 규칙은 Go의 JSON 구문 분석과 모순되는 것 같습니다.

다음 코드를 고려하세요.

<code class="go">package main

import (
    "fmt"
    "encoding/json"
)

type jsonobject struct {
    Objects []ObjectType `json:"objects"`
}

type ObjectType struct {
    Name string `json:"name"`
}

func main() {
    bytes := []byte(`{ "objects": 
        [ 
            {"name": "foo"}, // REMOVE THE COMMA TO MAKE THE CODE WORK!
        ]}`)
    jsontype := &jsonobject{}
    json.Unmarshal(bytes, &jsontype)
    fmt.Printf("Results: %v\n", jsontype.Objects[0].Name) // panic: runtime error: index out of range
}</code>

이 코드에서는 JSON 배열에서 후행 쉼표를 제거하면 작동합니다. 그런데 이런 모순을 피할 수 있는 방법은 없을까?

결심

안타깝게도 그렇지 않다. JSON 사양에서는 후행 쉼표를 금지합니다. 다른 줄에 계속되는 열린 열거형에 후행 쉼표를 추가하는 것은 유효한 Go 구문입니다. 그러나 이는 JSON에는 적용되지 않습니다.

다음은 잘못된 JSON 구조의 예입니다.

{ "objects": 
    [ 
        {"name": "foo"},
]}

특정 JSON 파서가 이 형식을 허용하도록 설득하는 것이 가능하더라도 다른 유효한 JSON 파서는 오류를 올바르게 보고합니다. 따라서 JSON 사양을 준수하고 후행 쉼표를 피하는 것이 좋습니다.

위 내용은 후행 쉼표가 있는 JSON 배열을 구문 분석할 때 Go 코드에 런타임 오류가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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