[解決済み] バイナリデータをJSON文字列で。Base64より優れたもの
質問
その JSON形式 は、ネイティブではバイナリデータをサポートしていません。バイナリデータは、JSONの文字列要素(すなわち、バックスラッシュエスケープを使用した二重引用符内のゼロまたはそれ以上のユニコード文字)に配置できるようにエスケープされなければならない。
バイナリデータをエスケープする方法として、Base64を使用することは明らかである。しかし、Base64は処理のオーバーヘッドが大きい。また、3バイトを4文字に展開するため、データサイズが約33%増加する。
のv0.8ドラフトは、このための1つのユースケースです。 CDMIクラウドストレージAPI仕様 . REST-Webservice で JSON を使用してデータオブジェクトを作成します。
PUT /MyContainer/BinaryObject HTTP/1.1
Host: cloud.example.com
Accept: application/vnd.org.snia.cdmi.dataobject+json
Content-Type: application/vnd.org.snia.cdmi.dataobject+json
X-CDMI-Specification-Version: 1.0
{
"mimetype" : "application/octet-stream",
"metadata" : [ ],
"value" : "TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz
IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg
dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu
dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo
ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=",
}
バイナリデータをJSON文字列にエンコードするための、より良い方法や標準的な方法はあるのでしょうか?
どのように解決するのですか?
JSONの仕様では、1バイトで表現できるユニコード文字は94文字です(JSONがUTF-8で伝送される場合)。それを考えると、スペース的にベストなのは ベース85 これは4バイトを5文字で表現するものです。しかし、これはbase64に比べて7%しか改善されておらず、計算コストも高く、実装もbase64に比べて少ないので、おそらく勝ち目はないでしょう。
また、すべての入力バイトをU+0000~U+00FFの対応する文字に単純にマッピングし、これらの文字を渡すためにJSON標準が要求する最低限のエンコーディングを行うこともできます。この場合の利点は、必要なデコーディングが組み込み関数以外にはないことですが、空間効率が悪く、105%の拡張(すべての入力バイトが同等の可能性を持つ場合)と、base85の25%、base64の33%に相当します。
最終判断:Base64は、一般的で簡単、そして悪くないという理由で、私の意見ではBase64の勝ちです。 十分 ということです。
関連
-
[解決済み] cURLでJSONデータをPOSTするにはどうすればよいですか?
-
[解決済み] JSONデータをファイルに書き込むにはどうしたらいいですか?
-
[解決済み] JSON文字列を安全にオブジェクトに変換する
-
[解決済み] JSオブジェクトをJSON文字列に変換する
-
[解決済み] JavaScriptSerializer - 列挙型を文字列としてJSONシリアライズする
-
[解決済み] base64文字列をエンコード、デコードするにはどうしたらいいですか?
-
[解決済み] JavaScriptで画像をBase64文字列に変換するにはどうすればよいですか?
-
[解決済み] JavaでBase64データをデコードする
-
[解決済み】なぜPythonはこのJSONデータをパースできないのですか?[終了] PythonがこのJSONデータをパースできないのはなぜですか?
-
[解決済み】JavaScriptで文字列をBase64にエンコードするにはどうすればいいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] SQLAlchemy (psycopg2.ProgrammingError) can't adapt type 'dict'.
-
[解決済み] JSON - XMLのCDATAに相当するものはありますか?
-
[解決済み] ヘッダ値:application/vnd.api+json
-
stdClass 型のオブジェクトを配列として使用できない
-
[解決済み] 複数の配列を持つJSONオブジェクトを作るにはどうしたらいいですか?
-
[解決済み] Notepad++でJSONを再フォーマットする方法は?
-
[解決済み] YAMLとJSONの違いは何ですか?
-
[解決済み] JSON命名規則(snake_case、camelCase、PascalCase) [終了しました。]
-
[解決済み] application/x-www-form-urlencoded or multipart/form-data?
-
[解決済み] VSCodeでlaunch.jsonに環境変数を追加する方法