【问题标题】:How to dump compressed strings in json?如何在json中转储压缩字符串?
【发布时间】:2015-12-17 20:25:34
【问题描述】:

我有一个使用zlib 压缩的字符串,将其存储在字典中并创建字典的md5 哈希。但我得到了错误:

UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c in position 1: invalid start byte

代码是:

data['extras'] = zlib.compress("My string".encode("utf-8"))  //The string is very large that\'s why it\'s needed to be compressed to save up memory 
checkup['hash'] = hashlib.md5(json.dumps(dict(data), sort_keys=True)).hexdigest()

字典是这样的:

{'extras':'x\x9cK\x04\x00\x00b\x00b'}

谁能告诉我如何在 JSON 中转储这个字典/字符串?

字符串是一个长json。比如:

{
    "listing": {
            "policies": null,
            "policy_explanation": "Some Text",
            "policy_name": "Flexi3",
            "updated": "7 weeks ago",
            "city": "Bengaluru",
            "country": "India",
             .
             .
             .   
}

【问题讨论】:

  • 你试过放 utf8 标头吗?你在用 py2 吗?
  • 是的。结果相同。根据日志checkup['hash'] = hashlib.md5(json.dumps(dict(data), sort_keys=True)).hexdigest(),错误在这一行中
  • py2 str 真是令人头疼。有问题的角色是什么?你能发布部分str
  • 按照@Turn 的建议在压缩后添加base64.b64encode 后它工作正常。但是字符串的长度增加了近 30%。 12272:9204。是否有任何替代解决方案,这样它就不会占用额外的空间?
  • JSON 不支持二进制数据,所以像 base64 这样的东西是你能做的最好的......除非......你决定不压缩你的字典中的字符串,而是压缩整个 JSON 字符串一旦被转储。例如,如果您在网络上发送它,您需要对整个 json 有效负载进行 gzip 编码。

标签: python json dictionary compression zlib


【解决方案1】:

您可以首先对其进行 base64 编码以使其正常工作。它会给字符串增加一些大小,但可能比你先压缩它保存的要少:

data['extras'] = base64.b64encode(zlib.compress("My string".encode("utf-8")))

【讨论】:

  • 感谢@Turn 的建议。
猜你喜欢
  • 1970-01-01
  • 2015-05-28
  • 2011-05-19
  • 1970-01-01
  • 2011-04-08
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多