【问题标题】:CGI::Application::Plugin::JSON - json_body returns backwardsCGI::Application::Plugin::JSON - json_body 向后返回
【发布时间】:2013-11-25 12:32:20
【问题描述】:

我想知道是否有人知道为什么这个返回与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,记住它是向后的是可以的,但我有很多返回要处理,客户端的验证是通过'result' 值,所以如果我只是遗漏了一些东西,我希望它像输入一样输出。

编辑

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

感谢您在这方面获得的任何帮助。

【问题讨论】:

    标签: json perl cgi cgi-application


    【解决方案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

    【讨论】:

    • 我认为这是由于哈希排序的随机性和另一个模块只是为了我的强迫症麻袋不值得这样做,但它总是以相同的方式返回(100迭代左右)所以我不确定模块是否在做一些奇怪的事情。 Tie::IxHash 正是我想要的,result => 1 工作完美。非常感谢,现在是时候停止编码,回到洛圣都的“真实”世界了......
    • (5.18之前更难按顺序触发变化)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-31
    • 2021-02-07
    • 2014-02-28
    • 1970-01-01
    • 1970-01-01
    • 2021-05-01
    相关资源
    最近更新 更多