Как найти разницу между обычным текстом и текстом в кодировке JSON в Perl? - PullRequest
3 голосов
/ 06 апреля 2010

Я использовал JSON :: Any в моей программе для передачи хэша между клиентом и сервером.

Я столкнулся с одной проблемой, я хочу выяснить, является ли текст (отправленный клиентом) обычным текстом или текстом в кодировке JSON.

Может кто-нибудь сказать, пожалуйста, как найти,

без проверки, я получил ошибку на стороне сервера, и она закрыта.

Ответы [ 2 ]

4 голосов
/ 06 апреля 2010

Вы не можете сделать это без проверки.Самый простой подход - просто выполнить декодирование, а затем обработать исключение.

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 голос
/ 07 апреля 2010

Хорошо, если вы отправляете JSON в HTTP-сообщениях, вы должны использовать правильный JSON MIME тип . Когда вы получите запрос, проверьте тип MIME. Когда вы отправляете ответ, установите правильный тип MIME.

Если пользовательский агент использует text/plain для всего, вы застряли в методе daxim 'попробуй и посмотри' .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...