如何将Moose对象转换为JSON以在Catalyst中使用?

Eva*_*oll 2 perl serialization json moose catalyst

我有一系列Moose对象,我希望通过Catalyst :: View :: JSON提供给JSON :: XS.JSON :: XS无法编码有福的数据结构.我知道MooseX :: Storage :: Format :: JSON可以 - 有点 - 做我想做的事; 但是,它似乎相当沉重.我正在寻找的与XXX.pm提供的信息基本相同.我只是想在原始数据结构递归unblessed所以(驱动程序是内部使用)可以显示它.JSON::XSJSON::AnyC:V:JSON

使用Catalyst::View::JSONJSON::XS使用Moose对象的最佳方法是什么?看来我有四个明显的选择:

  1. Catalyst::View::JSON工作与驼鹿对象,通过修补C:V:JSON的阅读freeze和完成的要求,如果曝光的参数是驼鹿对象.
  2. 补丁JSON::XS回退以返回值$obj->freeze if $obj->isa('Moose') && $obj->does('MooseX::Storage::Format::JSON').我应该调查MX:S:F:JSON以确保JSON::Any由代理使用的类MX:S:F:JSON是什么JSON::XS(如果为调用使用JSON::Any的Moose对象选择不同的内部编码器,则不愿意想到错误JSON::XS.
  3. 弄清楚如何递归 - 解禁并让它Catalyst::View::JSON做它的事情.
  4. 完全不要使用Catalyst::View::JSON.只需写入STDOUT $obj->freeze并手动完成请求..这似乎是最hackish.

我确定还有其他一些选择,任何想法?什么是我最好的选择?

per*_*rin 5

我倾向于使用MooseX :: Storage来做选项3,以提供一个pack()返回Perl数据结构的方法,我可以将其存储在我的存储中,以便View可以按照它选择的方式呈现它.

另请注意,可以强制JSON :: Any(通过环境,或通过传递适当的参数import())来选择特定的后端.这就是测试套件的工作方式,并记录在案.

  • MooseX :: Storage是唯一正确的答案. (2认同)