目次
JSON の Null 整数値のマーシャリング
ホームページ バックエンド開発 Golang Go で JSON をアンマーシャリングするときに Null 整数値を処理する方法は?

Go で JSON をアンマーシャリングするときに Null 整数値を処理する方法は?

Nov 28, 2024 am 10:12 AM

How to Handle Null Integer Values When Unmarshalling JSON in Go?

JSON の Null 整数値のマーシャリング

Go では、特に整数と Null 値を扱う場合に、JSON ストリームの解析が複雑になることがあります。 null 許容型を使用した一般的な問題とその解決策を見てみましょう。

問題:

整数を含む JSON データを解析するときに、次のエラーが発生する場合があります:

json: cannot unmarshal null into Go value of type int64
ログイン後にコピー

このエラーは、標準の Go JSON パッケージでは処理できない、JSON 内に null 許容整数がある場合に発生します。

解決策:

この問題に対処するには、整数へのポインターの使用を検討してください。ポインタは nil (null 値を表す) にすることも、関連する値を持つ整数を指すこともできます。実装方法は次のとおりです:

import (
    "encoding/json"
    "fmt"
)

var d = []byte(`{ "world":[{"data": 2251799813685312}, {"data": null}]}`)

type jsonobj struct{ World []*int64 }
type World struct{ Data *int64 }

func main() {
    var data jsonobj
    jerr := json.Unmarshal(d, &data)
    if jerr != nil {
        fmt.Println(jerr)
    }

    for _, w := range data.World {
        if w == nil {
            fmt.Println("Got a null value")
        } else {
            fmt.Println(*w)
        }
    }
}
ログイン後にコピー

この変更された例では:

  • null 許容整数を許可するために、World struct (*int64) で int64 へのポインターを定義します。
  • jsonobj 構造体は World ポインターの配列を保持し、null 以外と null の両方を処理できるようにします。 integers.

JSON を解析するとき、数値と null 整数値を正しく処理し、それに応じて出力します。

Got a null value
2251799813685312
ログイン後にコピー

このアプローチは、null 許容整数を処理するためのシンプルで効果的な方法を提供します。 Go で JSON ストリームを解析するとき。

以上がGo で JSON をアンマーシャリングするときに Null 整数値を処理する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか? Mar 03, 2025 pm 05:17 PM

Go Language Packのインポート:アンダースコアとアンダースコアなしの違いは何ですか?

Beegoフレームワークのページ間で短期情報転送を実装する方法は? Beegoフレームワークのページ間で短期情報転送を実装する方法は? Mar 03, 2025 pm 05:22 PM

Beegoフレームワークのページ間で短期情報転送を実装する方法は?

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

GOでテスト用のモックオブジェクトとスタブを書くにはどうすればよいですか?

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか? Mar 10, 2025 pm 05:36 PM

トレースツールを使用して、GOアプリケーションの実行フローを理解するにはどうすればよいですか?

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は? Mar 03, 2025 pm 05:18 PM

MySQLクエリ結果リストをGO言語のカスタム構造スライスに変換する方法は?

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか? Mar 10, 2025 pm 03:20 PM

GOのジェネリックのカスタムタイプ制約を定義するにはどうすればよいですか?

Go言語でファイルを便利に書く方法は? Go言語でファイルを便利に書く方法は? Mar 03, 2025 pm 05:15 PM

Go言語でファイルを便利に書く方法は?

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか? Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか? Mar 10, 2025 pm 05:38 PM

Linterと静的分析ツールを使用して、GOコードの品質と保守性を向上させるにはどうすればよいですか?

See all articles