喜欢或讨厌它,我的最终解决方案是恢复到现在已弃用的JSON::Syck,这正是我想要的。这是逻辑非 Moose 序列化为 JSON 的快速非 Moose 示例。
use JSON::Syck;
use URI;
use feature ':5.10';
say JSON::Syck::Dump(
bless { foo => URI->new("http://www.evancarroll.com") }
)
我写了关于JSON::XS的作者,他不是添加功能的游戏。以下是JSON::XS 维护者Marc Lehmann的一些文本(从大量消息中摘录以说明为什么没有此功能) :
不,因为您使用的是JSON而不是Perl。Perl 显然能够表示任何 Perl 数据结构,但 JSON 不能,因此您需要告诉它要做什么。许多人天真地要求“只转储数据结构”之类的东西,但 JSON 甚至不能代表所有非对象的 perl 数据结构。
...
您的问题是:为什么我不能将这个 1MB 的 jpeg 图像作为 ascii 文件发送 - 仅仅是因为 ascii 不能代表八位字节。
...
或者,也许您只是想向它扔一些垃圾并期望 JSON::XS 做对您有好处的事情(但对其他人来说是错误的) - JSON::XS 根本无法神奇地猜测您想要什么。
...
TO_JSON 就是它。其他任何事情都只是疯狂的猜测。
...
那么也许你应该尝试 JSON 可以实际表示的东西。向它抛出一些对象层次结构并希望它会做“正确的事情”显然是糟糕的软件工程 - 尽量不要使用黑客攻击,当你的协议需要 JSON,然后发送 JSON,不要指望 json 库修复你的无效消息放在首位。
我不知道如何回应,除了我不关心。只是工作!喜欢 ::SYCK。我不希望对象完美地转换为 JSON。但是,我认为我属于只希望它工作的 80%。我正在使用 JSON 进行 jQuery 导入,而不是在脑部手术期间执行银行交易。最终,我不想使用一个特殊的角色......我希望任何发送给它的东西都能神奇地为我转换到一个级别,使它在响应 jQuery JSON 请求时有用。
更新
抱歉,我错过了这些回复,直到有人说我在一个不相关的媒体中拖钓。MooseX::Storage 不适用于非 Moose 类,我想要一种以 JSON 格式表示存储的通用方法。不幸的是,其中一些成员是 Moose 对象。XML::Simple 可以做到这一点,Data::Dumper
可以做到这一点,JSON::Syck 可以做到这一点,不胜枚举——我只想完成它。它不必与 Perl 是 1:1 的,老实说,我希望它的完成方式JSON::Syck
与默认情况下的方式非常接近。那么我的论点是,“我如何才能JSON::XS
像JSON::Syck
现在一样工作”?而且,你的答案是你不能。所以我没有采用不同的解决方案。写代码要花钱,我为什么要写to_JSON
如果 Syck 已经做对了……我想说的是,反对者有责任展示 Syck 正在序列化一种不受欢迎的时尚。另外,请记住JSON::Syck
是由Audry播种的,他绝不是巨魔、白痴或“脑残”;或者,我遇到的任何其他条款。我将以此结束:缺少错误的序列化路线JSON::Syck
和所需的输出已经正常工作让我相信这对我来说是一个不错的选择。而且,MooseX::*:JSON 对任意 Moose 对象有何不同?为什么你认为不能编写代码来接受 Moose 对象而不是其上的方法?如果您不这么认为,请回答一些实质性的问题——我希望看到更好的回应。谢谢。(针对@jrockway 和@Ether)