Mojolicious - 无法在 RESTful 中解析 JSON
Mojolicious - Can't parse JSON in RESTful
我无法在 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
}
这是我在 Mojolicious
中的 RESTful 代码
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?
我解决了!
{
'id': 1
}
需要替换成
{
"id": 1
}
然后可以使用
访问id
my $test = decode_json($self->req->body);
$test->{id};
以及缩短的方式
my $test = $self->req->json;
$test->{id};
也在工作!
错误是因为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 风格编写测试。
我无法在 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
}
这是我在 Mojolicious
中的 RESTful 代码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?
我解决了!
{
'id': 1
}
需要替换成
{
"id": 1
}
然后可以使用
访问idmy $test = decode_json($self->req->body);
$test->{id};
以及缩短的方式
my $test = $self->req->json;
$test->{id};
也在工作!
错误是因为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 风格编写测试。