是否有一种简单的方法来估计json对象的大小?

时间:2016-08-19 21:02:19

标签: json

我正在开发一个安全服务,它将返回一个权限列表,我正在尝试估计json响应对象的大小。这是一段样本数据:

ID = 123 VARIABLENAME = CanAccessSomeContent

我正在寻找一种简单的方法来估计json响应对象的大小为1500行。是否有在线估算工具或其他一些我可以用来轻松获得粗略尺寸估算的技术?

4 个答案:

答案 0 :(得分:2)

使用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

答案 1 :(得分:1)

我不确定这是否是你所追求的,因为这看起来非常基本,但这里有:

  1. 首先从0行开始,对其进行编码并测量大小(我们称之为A)。
  2. 然后,从您的数据库中获取一个不错的样本并一次编码1行。
  3. 对于每个输出,计算大小,然后存储平均值(我们称之为B)。
  4. 现在X行,估计的json响应为X * (B-A) + A

    因此,如果A是100个字节,B是150个字节,那么对于1500行,我们将得到:

    1500 * (150-100) + 100 = 75100 bytes = 73 KB
    

答案 2 :(得分:1)

估算文件大小的函数(JSON-SizeUTF-8 Length节点回购的Mash)

function json_filesize (value) {  
    // returns object size in bytes
    return (~-encodeURI(JSON.stringify(value)).split(/%..|./).length)/1048576
}
  
    

json_filesize({foo:' bar'})>> 13

  

答案 3 :(得分:1)

在需要时,我通过添加一个仅计算字符数的文件型对象并将json.dump()放入其中来解决此问题:

# 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

优点是编码不会存储在内存中,这可能会很大,尤其是在您关心开始的大小的情况下。