我在使用内置的用于
JSON和
JSON数组的Perl
Dancer序列化程序时遇到问题.
我在app.pl文件中激活了序列化程序:
#!/usr/bin/env perl use Dancer; use main; set serializer => 'JSON'; dance;
在模块本身中,我测试了JSON解析,如下所示:
post '/test/' => sub { my $params = request->params; debug('Test: ',$params); };
现在我想确保按预期解析JSON,所以我尝试使用cURL来理解序列化器的工作方式:
curl -H "Content-Type: application/json" -X POST http://localhost:3000/test/ -d '{ "Name" : "foo","email" : "bar" }'
结果如预期:
Test: {'Name' => 'foo','email' => 'bar'}
但是试图发送一个数组:
curl -H "Content-Type: application/json" -X POST http://localhost:3000/test/ -d '[{ "Name" : "foo","email" : "bar" }]'
导致:
Test: {}
我希望序列化程序返回一个数组引用,但它似乎返回一个空哈希.我尝试反过来使用序列化程序,但编码JSON似乎按预期工作.我做错了什么?
解决方法
以为我有代码执行此操作,但是,错了.
我无法让params解析任何深度的东西.也许这是设计但是,从文档中我并不是很清楚.
直接使用from_json函数,您可以解析包含POST’d JSON字符串的request-> body:
注意:我使用Data :: Dumper打印变量内容,试图让它更清晰一些.
post '/test/' => sub { #my @params = params ; #my @params = request->body; my $body = request->body; my $j_O = from_json( $body ); #deubg( 'Test1: ' . Dumper( request->body ) ); #debug( 'Test2: ' . Dumper( request->params ) ); #debug( 'Test3: ' . Dumper( { params } ) ); debug( 'Test4: ' . Dumper( $body ) ); debug( 'Test5: ' . Dumper( $j_O ) ); };
OUTPUT:
[27993] debug @0.001528> [hit #2]Test4: $VAR1 = '[ { "Name" : "foo","email" : "bar" },{ "Name" : "bar"} ]'; in /media/truecrypt1/Projects/Perl5+/Dancer/Test/lib/Test.pm l. 23 [27993] debug @0.001772> [hit #2]Test5: $VAR1 = [ { 'email' => 'bar','Name' => 'foo' },{ 'Name' => 'bar' } ];