ホームページ > バックエンド開発 > Golang > Go で文字列として保存された Float64 値を使用して JSON 文字列をデコードするにはどうすればよいですか?

Go で文字列として保存された Float64 値を使用して JSON 文字列をデコードするにはどうすればよいですか?

Linda Hamilton
リリース: 2025-01-01 12:59:11
オリジナル
187 人が閲覧しました

How to Decode JSON Strings with Float64 Values Stored as Strings in Go?

Go で String から float64 への型変換を使用して JSON をデコードする

float64 値を含む JSON 文字列を解析すると、値の保存時に問題が発生する可能性があります文字列として。この問題に対処するために、Go は簡単な解決策を提供します。

エラーについて:

「{"name":"Galaxy Nexus」のような JSON 文字列をデコードしようとしたとき", "price":"3460.00"}" json.Unmarshal 関数を使用すると、次のような問題が発生する可能性があります。 error:

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

このエラーは、JSON デコーダが float64 数値の文字列表現を float64 値に直接変換しようとするために発生しますが、これはサポートされていません。

解決策:型変換アノテーション

この問題を解決するには、デコーダに明示的に処理を指示する必要があります。型変換アノテーションを使用した float64 としての文字列。この注釈は、Product 構造体のフィールド定義に追加されます。

type Product struct {
    Name  string
    Price float64 `json:",string"`
}
ログイン後にコピー

「,string」タグは、Price フィールドが float64 に変換する必要がある文字列であることを JSON デコーダーに伝えます。

更新されたコード:

更新された Go は次のとおりですコード:

package main

import (
    "encoding/json"
    "fmt"
)

type Product struct {
    Name  string
    Price float64 `json:",string"`
}

func main() {
    s := `{"name":"Galaxy Nexus", "price":"3460.00"}`
    var pro Product
    err := json.Unmarshal([]byte(s), &pro)
    if err == nil {
        fmt.Printf("%+v\n", pro)
    } else {
        fmt.Println(err)
        fmt.Printf("%+v\n", pro)
    }
}
ログイン後にコピー

期待される出力:

このコードを実行すると、期待される出力が生成されます:

{Name:Galaxy Nexus Price:3460}
ログイン後にコピー

json.Unmarshal 関数は正常に実行されました。 JSON 文字列をデコードし、価格を文字列から float64 に変換しました。

以上がGo で文字列として保存された Float64 値を使用して JSON 文字列をデコードするにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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