我不可能在MojolicIoUs中解析
JSON.我更新了MojolicIoUs并在使用之前使用了代码,但不推荐使用JSON-> new.
my $json = Mojo::JSON->new; my $user_request = $json->decode($c->req->body); my $err = $json->error;
从教程中,我发现已经添加了$self-> req-> json,但所有POST都会导致错误和非工作代码.
curl -H "Content-Type: application/json" --data @body.json http://localhost:3000/checkaddress
而我的body.json看起来像这样
{ 'id': 1 }
post '/checkaddress' => sub { my $self = shift; my $dump = $self->dumper($self->req->json); };
控制台日志
[Sat Feb 20 08:23:27 2016] [debug] 200 OK (0.001688s,592.417/s) [Sat Feb 20 08:24:38 2016] [debug] POST "/checkaddress" [Sat Feb 20 08:24:38 2016] [debug] Routing to a callback [Sat Feb 20 08:24:38 2016] [debug] undef
调用$self-> req-> body然后从Mojo :: JSON调用decode_json将导致
[error] Malformed JSON: Expected string while parsing object at line 1,offset 5 at /home/aa/sempt2.pl line 15.
那么,现在如何正确解析JSON?
解决方法
这与MojolicIoUs 6.25一起使用,是一个完整的例子:
package MyREST; use Mojo::Base 'MojolicIoUs'; use Data::Dumper; sub startup { my $app = shift; my $routes = $app->routes; $routes->post('/checkaddress' => sub { my $self = shift; my $data = $self->req->json; my $dump = $self->dumper($self->req->json); print STDERR $dump; $self->render(json => $data); }); } 1;
为方便和可靠地测试小客户端脚本:
#!perl use strict; use warnings; use Mojo::UserAgent; my $ua = Mojo::UserAgent->new; my $tx = $ua->post('http://localhost:3000/checkaddress' => json => { 'id' => "1",} );
此脚本可避免JSON编码问题.
更好的是,以MojolicIoUs风格编写测试.