如何在Perl中找到普通文本和JSON编码文本之间的区别?

时间:2010-04-06 07:49:04

标签: perl

我在程序中使用JSON::Any在客户端和服务器之间传输哈希值。

我遇到一个问题,我想查找文本(由客户端发送)是普通文本还是JSON编码文本。

任何人都可以告诉我如何找到,

没有检查,我在服务器端出现了一些错误,它已关闭。

2 个答案:

答案 0 :(得分:4)

如果没有检查,你就无法做到。最简单的方法是只进行解码然后处理异常。

use JSON::Any;
use Try::Tiny;

my $perl_data;
for my $perhaps_json (
    q(this won't decode), q({"how":"ever", "this":"will"}),
) {
    try {
        $perl_data = JSON::Any->jsonToObj($perhaps_json);
    } catch {
        warn "decoding failed: $_\n";
    }
}
say "Even with invalid input, I did not crash!";
__END__
decoding failed: 'true' expected, at character offset 0 (before "this won't decode") at .../lib/perl5/site_perl/5.10.1/JSON/Any.pm line 529.

Even with invalid input, I did not crash!

答案 1 :(得分:1)

好吧,如果您要在HTTP消息中发送JSON,那么您应该使用正确的JSON MIME type。收到请求后,请检查MIME类型。发送响应时,请设置正确的MIME类型。

如果用户代理正在使用text/plain来处理所有内容,那么您仍然会遇到daxim's 'try it and see' method