pref: pickle decoder support type datetime

This commit is contained in:
Lykin
2025-08-12 16:02:34 +08:00
parent f70121b45d
commit 3707e2ed96

View File

@@ -14,6 +14,21 @@ import base64
import json
import pickle
import sys
from datetime import datetime
def default_serializer(o):
if isinstance(o, datetime):
return o.isoformat()
return str(o)
def object_hook(obj):
for k, v in obj.items():
if isinstance(v, str):
try:
obj[k] = datetime.fromisoformat(v)
except ValueError:
pass
return obj
if __name__ == "__main__":
if len(sys.argv) >= 3:
@@ -24,11 +39,11 @@ if __name__ == "__main__":
if action == 'decode':
decoded = base64.b64decode(content)
obj = pickle.loads(decoded)
unserialized = json.dumps(obj, ensure_ascii=False)
unserialized = json.dumps(obj, ensure_ascii=False, default=default_serializer)
print(base64.b64encode(unserialized.encode('utf-8')).decode('utf-8'))
elif action == 'encode':
decoded = base64.b64decode(content)
obj = json.loads(decoded)
obj = json.loads(decoded, object_hook=object_hook)
serialized = pickle.dumps(obj)
print(base64.b64encode(serialized).decode('utf-8'))
except: