首頁 > 後端開發 > Golang > 主體

為什麼我的 Go 程式碼在解析帶有逗號的 JSON 陣列時會出現執行時間錯誤?

DDD
發布: 2024-10-28 08:13:29
原創
895 人瀏覽過

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 規範並避免尾隨逗號。

以上是為什麼我的 Go 程式碼在解析帶有逗號的 JSON 陣列時會出現執行時間錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!