2016-02-20 2 views
3

Невозможно разобрать JSON в Mojolicious для меня. Я обновил Mojolicious и использовал его до следующего кода, но JSON-> new устарел.Mojolicious - Невозможно разобрать JSON в RESTful

my $json = Mojo::JSON->new; 
my $user_request = $json->decode($c->req->body); 
my $err = $json->error; 

из учебников, я узнал, что там было добавлено $ self-> req-> JSON, но все сообщения в это приведет к ошибкам и неработающего кода.

curl -H "Content-Type: application/json" --data @body.json http://localhost:3000/checkaddress 

и мой body.json выглядит следующим образом

{ 
     'id': 1 
} 

Вот мой RESTful код в Mojolicious

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, а затем decode_json от Mojo :: JSON будет результат

[error] Malformed JSON: Expected string while parsing object at line 1, offset 5 at /home/aa/sempt2.pl line 15. 

Итак, как правильно разобрать JSON сейчас?

ответ

6

Это работает с 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.

Даже лучше было бы написать тесты в Мохолическом стиле.

+0

Спасибо, к примеру. – user3606329

5

Я решил это!

{ 
    'id': 1 
} 

он должен быть заменен на

{ 
    "id": 1 
} 

, а затем идентификатор можно затем получить доступ с

my $test = decode_json($self->req->body); 
$test->{id}; 

И укоротить путь

my $test = $self->req->json; 
$test->{id}; 

работает слишком!

Ошибки произошли из-за неправильной кодировки json '', которая должна быть «". Надеюсь, это поможет кому-то.

Смежные вопросы