"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > JSON의 후행 쉼표 : GO \의 복합 문자 구문이 JSON 구문 분석과 충돌하는 이유는 무엇입니까?

JSON의 후행 쉼표 : GO \의 복합 문자 구문이 JSON 구문 분석과 충돌하는 이유는 무엇입니까?

2025-03-23에 게시되었습니다
검색:794

  Trailing Commas in JSON: Why Does Go\'s Composite Literal Syntax Conflict with JSON Parsing?

다음 코드를 고려하십시오. jsonobject struct {유형 Objects [] ObjectType` json : "Objects"` } ObjectType Struct {유형 이름 문자열`json : "name"` } func main () { 바이트 : = [] 바이트 (`{ "객체": [의 뜻 { "name": "foo"}, // 코드가 작동하도록 쉼표를 제거하십시오! ]}`) jsontype : = & jsonobject {} json.unmarshal (바이트, & jsontype) fmt.printf ( "결과 : %v \ n", jsontype.objects [0] .name) // panic : 런타임 오류 : 범위를 벗어난 색인 }

후행 쉼표를 제거하면 런타임 오류가 해결됩니다. 이 불일치에 대한 수정을 지원합니까?

솔루션

불행히도 솔루션이 없습니다. JSON 사양은 후행 쉼표를 허용하지 않습니다. Go Syntax는 복합 리터럴에서 쉼표를 따라 가야하지만이 요구 사항은 JSON 구문 분석에는 적용되지 않습니다.
// package, imports omitted for brevity

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
}

특정 JSON 파서가 후행 쉼표를 무시할 가능성에도 불구하고 다른 유효한 JSON 파서를 사용할 때 오류가 발생할 수 있으므로이 관행을 피해야합니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3