我怎么知道通过电线传输多少数据(以千字节,兆字节为单位)?
举个例子
{
'a': 1,
'b': 2
}
我怎么知道这个有效载荷的大小是多少,而而不是对象的长度或项目
更新
content-encoding:gzip
content-type:application/json
Transfer-Encoding:chunked
vary:Accept-Encoding
最佳答案
实际问题的答案应包括花在 header 上的字节,并应考虑gzip压缩,但我将忽略这些内容。
您有几种选择。它们在运行时都输出相同的答案:
如果使用浏览器或节点(不是IE)
const size = new TextEncoder().encode(JSON.stringify(obj)).length
const kiloBytes = size / 1024;
const megaBytes = kiloBytes / 1024;
如果需要它在IE上运行,则可以使用pollyfill如果使用节点
const size = Buffer.byteLength(JSON.stringify(obj))
(与Buffer.byteLength(JSON.stringify(obj), "utf8")
相同)。在IE,现代浏览器和节点中可用的快捷方式
const size = encodeURI(JSON.stringify(obj)).split(/%..|./).length - 1;
最后一个解决方案几乎在所有情况下都可以使用,但是如果您将包含不应该存在的字符串的输入(如URIError: URI malformed
)输入给它,则最后一个解决方案将抛出let obj = { partOfAnEmoji: "👍🏽"[1] }
异常。我提供的其他两个解决方案不会有这个弱点。(信誉:第一个解决方案的功劳是here。
第二种解决方案归功于utf8-byte-length软件包(这很好,您可以改用它)。
最后一个解决方案的大部分功劳归功于here,但我对其进行了简化。
在研究此功能时,我发现utf8-byte-length软件包的测试套件非常有用。)
关于javascript - json对象的大小? (以KB/MB为单位),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23318037/