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