【发布时间】:2016-08-19 21:02:18
【问题描述】:
我正在开发一项将返回权限列表的安全服务,并且我正在尝试估计 json 响应对象的大小。这是一段示例数据:
ID=123 变量名=CanAccessSomeContent
我正在寻找一种简单的方法来估计 1500 行的 json 响应对象的大小。是否有在线估算工具或其他一些技术可以用来轻松获得粗略的尺寸估算?
【问题讨论】:
标签: json
我正在开发一项将返回权限列表的安全服务,并且我正在尝试估计 json 响应对象的大小。这是一段示例数据:
ID=123 变量名=CanAccessSomeContent
我正在寻找一种简单的方法来估计 1500 行的 json 响应对象的大小。是否有在线估算工具或其他一些技术可以用来轻松获得粗略的尺寸估算?
【问题讨论】:
标签: json
使用 Python,您可以通过创建字典来估计大小,或者只制作一个......
import json
import os
import sys
dict = {}
for a in range(0, 1500):
dict[a] = {'VariableName': 'CanAccessSomeContent'}
output = json.dumps(dict, indent = 4)
print ("Estimated size: " + str(sys.getsizeof(output) / 1024) + "KB")
with open( "test.json", 'wb') as outfile:
outfile.write(output)
print ("Actual size: " + str(os.path.getsize('test.json') / 1024) + "KB")
输出:
Estimated size: 100KB
Actual size: 99KB
【讨论】:
我在需要时通过添加一个类似文件的对象来解决它,该对象只计算字符并将 json.dump()ing 放入其中:
# File-like object, throws away everything you write to it but keeps track of the size.
class MeterFile:
def __init__(self, size=0):
self.size = size
def write(self, string):
self.size += len(string)
# Calculates the JSON-encoded size of an object without storing it.
def json_size(obj, *args, **kwargs):
mf = MeterFile()
json.dump(obj, mf, *args, **kwargs)
return mf.size
优点是编码不存储在内存中,内存可能很大,尤其是在您关心开始的大小的情况下。
【讨论】:
估计文件大小的函数(JSON-Size 和 UTF-8 Length 节点存储库的混搭)
function json_filesize (value) {
// returns object size in bytes
return (~-encodeURI(JSON.stringify(value)).split(/%..|./).length)/1048576
}
json_filesize({foo: 'bar'}) >> 13
【讨论】:
我不确定这是否是您所追求的,因为这似乎非常基本,但这里是:
A)。B)。现在对于X 行,估计的json 响应将是X * (B-A) + A
所以如果 A 是 100 字节,B 是 150 字节,对于 1500 行,我们将得到:
1500 * (150-100) + 100 = 75100 bytes = 73 KB
【讨论】: