代码之家  ›  专栏  ›  技术社区  ›  Kérdezösködő Indián

DBIx到JSON-格式错误

  •  0
  • Kérdezösködő Indián  · 技术社区  · 7 年前

    在一个 催化剂 DBIx::类:核心 物体。

    use utf8;
    package My::Schema::Book;
    
    use strict;
    use warnings;
    
    use Moose;
    use MooseX::NonMoose;
    use MooseX::MarkAsMethods autoclean => 1;
    extends 'DBIx::Class::Core';
    
    __PACKAGE__->load_components("InflateColumn::DateTime");
    __PACKAGE__->table("books");
    __PACKAGE__->add_columns(
      "id",
      {
        data_type => "uuid",
        default_value => \"uuid_generate_v4()",
        is_nullable => 0,
        size => 16,
      },
      "title"
    );
    __PACKAGE__->set_primary_key("id");
    
    __PACKAGE__->meta->make_immutable;
    
    sub TO_JSON {
        my $self = shift;
        {book => {
            id => $self->id,
            title => $self->title,
        }}
    }
    
    1;
    

    从数据库中查询书籍后,我对受祝福的对象进行编码:

    $c->stash(books_rs => $c->model('My::Schema::Book'));
    $c->stash(books => [$c->stash->{books_rs}->search(
        {},
        {order_by => 'title ASC'})]
    );
    $c->stash(json => $json->convert_blessed->encode($c->stash->{books}));
    $c->forward('View::JSON');
    

    查询的JSON输出如下:

    {"json":"[{\"book\":{\"id\":\"ae355346-8e19-46ee-88ee-773ac30938a9\",\"title\":\"TITLE1\"}},{\"book\":{\"id\":\"9a20f526-d4cd-4e7d-a726-55e78bc3c0ac\",\"title\":\"TITLE2\"}},{\"book\":{\"title\":\"TITLE3\",\"id\":\"1ddb2d27-3ec6-46c1-a1a7-0b151fe44597\"}}]"}
    

    json

    1 回复  |  直到 7 年前
        1
  •  1
  •   UjinT34    7 年前

    $json->convert_blessed->encode($c->stash->{books}) 返回字符串。看起来像 View::JSON 还编码json。

    尝试按原样传递数据: $c->stash(json => $c->stash->{books}); expose_stash 和 json_encoder_args 处理隐藏中的正确关键点并正确转换对象。

    https://metacpan.org/pod/Catalyst::View::JSON#CONFIG-VARIABLES