JSON字符串中的二进制数据。比Base64更好的东西
该JSON格式本身不支持二进制数据。必须对二进制数据进行转义,以便可以将其放入JSON中的字符串元素(即使用反斜杠转义的双引号中的零个或多个Unicode字符)。
逃脱二进制数据的一种明显方法是使用Base64。但是,Base64具有较高的处理开销。它还将3个字节扩展为4个字符,这导致数据大小增加了约33%。
一个用例是CDMI云存储API规范的v0.8草案。您可以使用JSON通过REST-
Webservice创建数据对象,例如
PUT /MyContainer/BinaryObject HTTP/1.1Host: 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规范,有94个Unicode字符可以表示为一个字节(如果JSON以UTF-8格式传输)。考虑到这一点,我认为您可以在空间上做到最好的是base85,它代表四个字节五个字符。但是,与base64相比,这仅提高了7%,计算成本更高,并且实现比base64少,因此这可能不是胜利。
您还可以简单地将每个输入字节映射到U + 0000-U +
00FF中的相应字符,然后执行JSON标准所需的最小编码以传递这些字符;这样做的好处是所需的解码比内置函数要少零,但是空间效率很差-
扩展105%(如果所有输入字节均等的可能性),而base85为25%,base64为33%。
最终判决:BASE64胜,在我看来,其理由是它的普通,简单,不坏 足够的 认股权证更换。
另请参阅:Base91和Base122
以上是 JSON字符串中的二进制数据。比Base64更好的东西 的全部内容, 来源链接: utcz.com/qa/411698.html