ホームページ > バックエンド開発 > Golang > 末尾にカンマがある JSON 配列を解析すると、Go コードがランタイム エラーでパニックになるのはなぜですか?

末尾にカンマがある JSON 配列を解析すると、Go コードがランタイム エラーでパニックになるのはなぜですか?

DDD
リリース: 2024-10-28 08:13:29
オリジナル
997 人が閲覧しました

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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート