简体   繁体   English

python解码base64成json文件

[英]python decoding base64 into a json file

So I tried to compress a JSON file and decompress it using this code (the two built function)所以我尝试压缩一个 JSON 文件并使用此代码解压缩它(两个内置函数)
the compressing process works fine, but I can't figure out how to decompress it back to JSON, so I can append more items to it.压缩过程工作正常,但我不知道如何将其解压缩回 JSON,所以我可以 append 给它更多项目。
this is what I have tried:这是我尝试过的:

path = r"mypath.json"

print(json_zip(path))
with open(path, "w") as f:
    json.dump(json_zip(path), f, ensure_ascii=False, indent=4)

with open(path, "r") as f:
    file_data = json.load(f)
print(json_unzip(file_data))

print output:打印 output:

{'base64(zip(o))': 'eJwNyjEKgDAQBdGrLOn1AHYaUewEsftNiKuskawkInh7U80rxtgGWDOnDHTMSYBR9biY+iQvA4NEF31BN4sP5Voe9YGmuCuwObk+2tzjyOv9UUW2BGjrM2s0PzCOIWs='}
C:\Users\Beeri\Google Drive\Finance\BPicks\Stock Info\daily data copy - Copy\A.json

maybe I don't get the concept of decompression right, but I want the JSON to look like it was before.也许我没有正确理解减压的概念,但我希望 JSON 看起来像以前一样。 the JSON itself looks something like this: JSON 本身看起来像这样:

[
    {
        "date": "2020-05-18 16:00:00",
        "open": 83.79,
        "low": 83.67,
        "high": 83.79,
        "close": 83.67,
        "volume": 1855946
    },
    {
        "date": "2020-05-18 15:59:00",
        "open": 83.815,
        "low": 83.77,
        "high": 83.83,
        "close": 83.79,
        "volume": 1822469
    },
    {
        "date": "2020-05-18 15:58:00",
        "open": 83.9,
        "low": 83.78,
        "high": 83.9,
        "close": 83.815,
        "volume": 1803855
    }
]

according to your code:根据您的代码:

>>> compressed_json = data['base64(zip(o))']
>>> decompressed_json = zlib.decompress(b64decode(compressed))
>>> decompressed_json
b'"C:\\\\Users\\\\Beeri\\\\Google Drive\\\\Finance\\\\BPicks\\\\Stock Info\\\\daily data copy - Copy\\\\A.json"'
>>> json.loads(decompressed_json)
'C:\\Users\\Beeri\\Google Drive\\Finance\\BPicks\\Stock Info\\daily data copy - Copy\\A.json'

As mentioned by Karl, you basically compressed the file path not the actual file: try this正如卡尔所提到的,您基本上压缩了文件路径而不是实际文件:试试这个

import zlib, json
from base64 import b64encode, b64decode

path = r"filename.json"

def compress_json(data):
    return {'base64(zip(o))': b64encode(zlib.compress(json.dumps(data).encode('utf-8'))).decode()}

def decompress_json(data):
    compressed_json =  data['base64(zip(o))']
    return json.loads(zlib.decompress(b64decode(compressed_json)))

with open(path, "r") as f:
    data = f.read()
    compressed_json = compress_json(data)
    print(compressed_json)
    """
    {'base64(zip(o))': 'eJxTio7JUwCCaggFAjFKKYklqTFKVkCWkYGRga6Bqa6hhYKhmZW
    BARDFKOkgq80vSM0DqbUw1jO3RJHJyS+HSpiZo0hkZKZnYNeSnJNfnIpdU1l+TmkuWM7QwtT
    U0sQMIlmrQ7T7Ta1MLfG638LQFIcHzHF6wMIYpwfQ/IbsASMjEzNLcjxggdcDuMLf3AKX83EH
    P3pgIDvfwBgYBVDnx+TFKgEASGiHCQ=='}
    """
    decompressed_json = decompress_json(compressed_json)
    print(decompressed_json)
    """
[
    {
        "date": "2020-05-18 16:00:00",
        "open": 83.79,
        "low": 83.67,
        "high": 83.79,
        "close": 83.67,
        "volume": 1855946
    },
    {
        "date": "2020-05-18 15:59:00",
        "open": 83.815,
        "low": 83.77,
        "high": 83.83,
        "close": 83.79,
        "volume": 1822469
    },
    {
        "date": "2020-05-18 15:58:00",
        "open": 83.9,
        "low": 83.78,
        "high": 83.9,
        "close": 83.815,
        "volume": 1803855
    }
]
"""

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM