1. ホーム
  2. json

Goでjsonをアンマーシャリング: 必須フィールド?

2023-10-12 16:37:11

質問

Goを使用してJSON入力をパースする際に、フィールドが見つからなかった場合にエラーを発生させることは可能でしょうか?

ドキュメントで見つけることができませんでした。

フィールドを必須と指定するタグはないのでしょうか?

どのように解決するのですか?

の中にタグがありません。 encoding/json パッケージには、フィールドを "required"に設定するタグはありません。自分で MarshalJSON() メソッドを書くか、フィールドがないかポストチェックを行う必要があります。

フィールドの欠落をチェックするために、欠落/Nullとゼロ値を区別するためにポインタを使用する必要があります。

type JsonStruct struct {
    String *string
    Number *float64
}

完全な動作例です。

package main

import (
    "fmt"
    "encoding/json"
)

type JsonStruct struct {
    String *string
    Number *float64
}

var rawJson = []byte(`{
    "string":"We do not provide a number"
}`)


func main() {
    var s *JsonStruct
    err := json.Unmarshal(rawJson, &s)
    if err != nil {
        panic(err)
    }

    if s.String == nil {
        panic("String is missing or null!")
    }

    if s.Number == nil {
        panic("Number is missing or null!")
    }

    fmt.Printf("String: %s  Number: %f\n", *s.String, *s.Number)
}

遊び場