python - 从 Python 中的 Laravel 队列中反序列化复杂的 PHP 对象
问题描述
我正在尝试获取存储在此 Laravel 队列消息中的项目的 ID。我正在使用 Python 和库 phpserialize。
这是字符串:
'O:26:"App\\Jobs\\GetMatchReportJob":12:{s:10:"\x00*\x00patient";O:45:"Illuminate\\Contracts\\Database\\ModelIdentifier":4:{s:5:"class";s:11:"App\\Patient";s:2:"id";i:3;s:9:"relations";a:0:{}s:10:"connection";s:5:"pgsql";}s:5:"tries";i:3;s:10:"retryAfter";i:30;s:7:"timeout";i:25;s:10:"connection";N;s:5:"queue";s:14:"optimas-result";s:15:"chainConnection";N;s:10:"chainQueue";N;s:5:"delay";N;s:10:"middleware";a:0:{}s:7:"chained";a:0:{}s:6:"\x00*\x00job";N;}'
如您所见,我在一个对象中有一个对象。
我正在尝试创建一个对象挂钩,如下所示:
class Patient(object):
def __init__(self, data):
self.data = data
def object_hook(data, d):
cls = {'App\Jobs\GetMatchReportJob': Patient}['Illuminate\Contracts\Database\ModelIdentifier']
return cls(**d)
显然,这是错误的。如何创建对象挂钩来检索对象中的对象?
非常感谢
解决方案
我面临类似的问题 - (仍在尝试完全修复它)但我希望这可以帮助那里的人。使用 object_hook=ChainMap
例子 :
from phpserialize import loads
from collections import ChainMap, UserDict, namedtuple, Counter, OrderedDict,
defaultdict, deque, UserList, UserString
data = loads(b'O:26:"App\\Jobs\\GetMatchReportJob":12:{s:10:"\x00*\x00patient";O:45:"Illuminate\\Contracts\\Database\\ModelIdentifier":4:{s:5:"class";s:11:"App\\Patient";s:2:"id";i:3;s:9:"relations";a:0:{}s:10:"connection";s:5:"pgsql";}s:5:"tries";i:3;s:10:"retryAfter";i:30;s:7:"timeout";i:25;s:10:"connection";N;s:5:"queue";s:14:"optimas-result";s:15:"chainConnection";N;s:10:"chainQueue";N;s:5:"delay";N;s:10:"middleware";a:0:{}s:7:"chained";a:0:{}s:6:"\x00*\x00job";N;}', object_hook=ChainMap)
print(data)
print(data.maps)
推荐阅读
- excel - 使用宏触发不同文件中的宏
- node.js - 有没有办法实现passport.js google身份验证来颤抖?
- php - SQL query doctrine symfony
- c# - 如何根据鼠标的位置增加浮点变量
- performance - lombok '@Slf4j' 会减慢对象初始化速度吗?
- postgresql - 如何优化 Postgres 中子串搜索的查询?
- python - 替换熊猫数据框中分类变量的值
- php - 如何在 laravel 中生成自定义主 ID?
- c++ - 进程间通信:传递 C 风格的结构与 C++ 对象
- powershell - 带有目录列表的 Powershell 中的 Robocopy