Go의 유명한 전문가인 Dave Cheney는 복합 리터럴 선언에서 후행 쉼표의 요구 사항을 강조합니다. 그러나 이 규칙은 JSON 구문 분석과 충돌하는 것 같습니다.
다음 코드를 고려하세요.
<code class="go">// 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 }</code>
후행 쉼표를 제거하면 런타임 오류가 해결됩니다. Go는 이러한 불일치에 대한 수정을 지원하나요?
안타깝게도 해결책이 없습니다. JSON 사양에서는 후행 쉼표를 허용하지 않습니다. Go 구문에서는 복합 리터럴의 후행 쉼표를 요구하지만 이 요구 사항은 JSON 구문 분석에는 적용되지 않습니다.
즉, 다음 JSON은 유효하지 않습니다.
<code class="json">{ "objects": [ {"name": "foo"}, ]}</code>
특정 구문의 가능성에도 불구하고 후행 쉼표를 무시하는 JSON 파서. 다른 유효한 JSON 파서를 사용할 때 오류가 발생할 수 있으므로 이 방법은 피해야 합니다.
위 내용은 JSON의 후행 쉼표: Go의 복합 리터럴 구문이 JSON 구문 분석과 충돌하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!