【问题标题】:is there an easy way to estimate size of a json object?有没有一种简单的方法来估计 json 对象的大小?
【发布时间】:2016-08-19 21:02:18
【问题描述】:

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

ID=123 变量名=CanAccessSomeContent

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

【问题讨论】:

    标签: json


    【解决方案1】:

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

    【讨论】:

    • 你能提供一个c#的例子吗?
    【解决方案2】:

    我在需要时通过添加一个类似文件的对象来解决它,该对象只计算字符并将 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
    

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

    【讨论】:

      【解决方案3】:

      估计文件大小的函数(JSON-SizeUTF-8 Length 节点存储库的混搭)

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

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

      【讨论】:

      • 这不是 python 对吗?同样使用encodeURI,它适用于大型json对象吗?
      • 这是 JavaScript。我的浏览器在文件大小方面没有问题。
      【解决方案4】:

      我不确定这是否是您所追求的,因为这似乎非常基本,但这里是:

      1. 首先从 0 行开始,对其进行编码并测量大小(我们称之为A)。
      2. 然后,从您的数据库中获取一个合适的样本并一次编码 1 行。
      3. 对于每个输出,计算大小,然后存储平均值(我们称之为B)。

      现在对于X 行,估计的json 响应将是X * (B-A) + A

      所以如果 A 是 100 字节,B 是 150 字节,对于 1500 行,我们将得到:

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

      【讨论】:

        猜你喜欢
        • 2021-12-18
        • 2013-06-01
        • 1970-01-01
        • 1970-01-01
        • 2011-07-05
        • 1970-01-01
        • 2010-09-26
        • 2019-07-21
        • 2019-12-07
        相关资源
        最近更新 更多