base64 - JSON二进制数据有什么比Base64编码好的方法

  显示原文与译文双语对照的内容

JSON格式本身不支持二进制数据。 必须转义二进制数据,以便将它的放入字符串元素( 例如 。 在JSON中使用反斜杠转义的双引号或者更多的Unicode字符。

转义二进制数据的一个明显方法是使用 Base64. 然而,Base64有很高的处理开销。 它还将 3字节扩展到 4个字符,从而导致数据大小增加 33% 。

为这是一个用例的v0.8草案 CDMI云存储api规范。 你通过REST-Webservice使用 JSON,e.g. 创建数据对象


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字符串?

时间:

BSON ( 二进制 JSON ) 可以为你工作。 http://en.wikipedia.org/wiki/BSON

编辑:参考. NET 库 json.net 支持读取和写入bson如果你正在寻找一些 C# 服务器端的爱。

如果你处理带宽问题,请首先在客户端压缩数据,然后 base64-it 。

好的例子这样的魔法是 http://jszip.stuartk.co.uk/ 和更多的讨论这个话题 Gzip的javascript实现

我知道这是近 6年的问题,但我遇到了同样的问题,并认为我将共享一个解决方案: 多部分/form-data 。

通过发送一个多部分的形式,你可以发送第一个字符串,jsonmeta-data,然后分别发送原始二进制 Content-Disposition image(s), 索引的名称。

这里是一个很好的教程 Obj-C 如何做到这一点,这是博客文章解释如何分区边界形式的字符串数据,和单独的二进制数据。

唯一的改变你真正需要做的,是在服务器端,你必须捕获meta-data,适当引用文章的ed二进制数据。 授予它需要额外的工作在服务器端,但如果你发送很多图片或大图像,这可能是值得的。 结合在nsurlrequestgzip压缩。

...