ホームページ > バックエンド開発 > Golang > json.RawMessage 値をマーシャリングすると、生の JSON ではなく、base64 でエンコードされた文字列が生成されるのはなぜですか?

json.RawMessage 値をマーシャリングすると、生の JSON ではなく、base64 でエンコードされた文字列が生成されるのはなぜですか?

DDD
リリース: 2024-11-12 04:54:01
オリジナル
801 人が閲覧しました

Why does marshalling a json.RawMessage value result in a base64-encoded string instead of raw JSON?

json.RawMessage をマーシャリングすると Base64 でエンコードされた文字列が返されます

質問:

json.RawMessage 値、出力がなぜ生の JSON ではなく、base64 でエンコードされた文字列?

Background:

以下のコードは問題を示しています:

package main

import (
    "encoding/json"
    "fmt"
)

func main() {
    raw := json.RawMessage(`{"foo":"bar"}`)
    j, err := json.Marshal(raw)
    if err != nil {
        panic(err)
    }
    fmt.Println(string(j))  
}
ログイン後にコピー

Expected出力:

{"foo":"bar"}

実際出力:

"eyJmb28iOiJiYXIifQ=="

答え:

json.RawMessage 型の MarshalJSON メソッドは単純に基になるバイト スライスを返します。ただし、json.RawMessage が正しく動作するには、json.Marshal に渡される値がポインターである必要があります。

解決策:

問題を解決するには、コードを更新します。以下のように:

j, err := json.Marshal(&raw)
ログイン後にコピー

以上がjson.RawMessage 値をマーシャリングすると、生の JSON ではなく、base64 でエンコードされた文字列が生成されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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