CGI :: Application :: Plugin :: JSON - json_body向后返回

时间:2013-11-13 03:34:17

标签: json perl cgi cgi-application

我想知道是否有人知道为什么这次回归是CGI::Application::Plugin::JSON

sub {
    my ($self) = @_;

    my $q = $self->query;

    return $self->json_body({ result => '1', message => 'I should be AFTER result'} );

}

输出如下:

{"message":"I should be AFTER result","result":"1"}

我认为它会从键/值对中从左到右格式化JSON,并且记住它将向后退好是可以的,但我有很多返回要处理,并且客户端的验证是通过'结果'值因此,如果我只是遗漏了一些东西,我想让它输出就像输入一样。

修改

另外我只是注意到它没有返回JSON布尔类型对象,因为"result":"1"将反序列化为sting对象而不是JSON布尔值。有没有办法让它输出"result":1

感谢您为此提供的任何帮助。

1 个答案:

答案 0 :(得分:1)

  

我认为它会从键/值对

左右格式化JSON

您将分配给散列的列表与散列本身混淆。哈希没有左右两个;他们有一系列链表。

您将获得在哈希中找到元素的顺序。只要您使用哈希,就无法控制该顺序。

如果你确实需要按特定顺序排列字段(这可能很奇怪),你可以尝试使用看似哈希的东西,但要记住插入顺序(如Tie::IxHash)。

  

记住它会倒退是好的

它们不仅不“倒退”,订单甚至无法预测。

$ perl -MJSON -E'say encode_json {a=>1,b=>2,c=>3} for 1..3'
{"b":2,"c":3,"a":1}
{"c":3,"a":1,"b":2}
{"a":1,"c":3,"b":2}
  

有没有办法让它输出"result":1

result => 1