jsonをワイヤーで動かすのに苦労しています。ゴランのhttp応答の一部としてjsonbをエンコードする方法
http応答としてワイヤで送信する前に、構造体に追加する必要のあるPostgresデータベースにはjsonb
フィールドがあります。
構造体のペイロードフィールドがstring
の場合、マーシャリングはjsonを"{\"id\": \"3aa5fff0-ad91-41b1-84f0-d97f38e0e0f4\", \"user\": 1 }
のようにエスケープします。
構造体のペイロードフィールドがjson.RawMessage
の場合、marshallingはjsonをエスケープして(私が想像するように)base64でエンコードされたバイト列をエスケープします。
これは私がマーシャリングおよびHTTP応答ストリームに書いています構造体です:
type NestJobReturn struct { Status string `json:"status"` Nest json.RawMessage `json:"nest"` }
私はこの構造体のret
インスタンスを構築し、それをプリントアウト。私は%v
を使用している場合、それはバイトを示し、%s
は、適切な、非エスケープJSON文字列としてそれを示しています
log("Value of ret.Nest: %v", ret.Nest) // Value of ret.Nest: [123 34 105 ... log("Value of ret.Nest as a string: %s", ret.Nest) // Value of ret.Nest as a string: {"id": "f053...
マーシャリングおよびI/Oはthusly行われます
js, _ := json.Marshal(ret) res.Header().Set("Content-Type", "application/json") res.Write(js)
クライアントは現在、このようなメッセージ全体を受信しています。
{"status":"ok","nest":"eyJpZCI6ICJmMD..."}
... "nest"の意図した値は、データベースのjsonb
カラムの有効なjsonです。
アイデア?
'配列とスライスの値はJSON配列としてエンコードされますが、[]バイトはbase64エンコードされた文字列としてエンコードされます。' 'json.RawMessage'は[]バイト型です – jsxqf