1

我想知道是否有人知道为什么这个返回与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 Boolean 类型对象,因为"result":"1"它将反序列化为 sting 对象而不是 JSON Boolean。有没有办法让它输出"result":1

感谢您提供的任何帮助。

4

1 回答 1

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

于 2013-11-13T04:30:08.490 回答