我需要通过Kafka发送JSON消息,但我的应用程序对消息大小有限制。
该消息将由Python脚本构建。该脚本将从文件中读取基本JSON,将其转换并将其写入文件。因此,我需要估计创建的JSON的大小。
主要的问题是,当我将文件加载到python脚本并尝试通过调用sys.getsizeof(json)
来检查此json的大小(以字节为单位)时,我得到240
。当我通过调用stat -f%z stack.json
或cat stack.json | wc -c
使用shell工具检查文件大小时,我得到206
。 (我使用macOS High Sierra版本10.13.3)。
最重要的问题是Kafka如何解释邮件大小?这将是206,240还是其他值?
我的JSON(没有空格):
{"metadata":{"info":"important info"},"timestamp":"2018-04-06T12:19:38.611Z","content":{"id":"1","name":"name test","objects":[{"id":"1","url":"http://example.com","properties":[{"id":"1","value":"1"}]}]}}
Python脚本:
import json
import sys
def get_contents_from_json(file_path)-> dict:
try:
with open(file_path) as file:
contents = file.read()
return json.loads(contents)
except json.JSONDecodeError:
print('Error while reading json file')
except FileNotFoundError:
print(f'The JSON file was not found at the given path: \n{file_path}')
STACK_JSON = 'stack.json';
if __name__ == '__main__':
data = get_contents_from_json(STACK_JSON)
size_of_json = sys.getsizeof(data)
print(size_of_json)
答案 0 :(得分:1)
我测试了你的例子并得到了完全不同的结果。
首先,我复制了你给定的json字符串。并使用len(json_str)
,将其长度设为205
。我将其另存为文本文件json_str.json
,并将其大小设置为205B
。这是有道理的。
其次,我使用sys.getsizeof(json_str)
来获取其内存大小并获得254
,这也是有意义的,因为python3中的空sting具有49
大小。添加205
并等于254
。
所以我真的无法理解你提出的结果。