用perl解析json

用perl解析json,perl,json,Perl,Json,我试图用perl解析一些json,但遇到了问题。我已经阅读了它的文档,但仍然不完全理解如何编写代码。我找到了一些教程,但仍然有错误。以下是我的代码: fetch_json_page("http://api.oodle.com/api/v2/listings?key=TEST&format=json&region=usa&category=sale"); sub fetch_json_page { my ($json_url) = @_; my $browser

我试图用perl解析一些json,但遇到了问题。我已经阅读了它的文档,但仍然不完全理解如何编写代码。我找到了一些教程,但仍然有错误。以下是我的代码:

fetch_json_page("http://api.oodle.com/api/v2/listings?key=TEST&format=json&region=usa&category=sale");

sub fetch_json_page
{
  my ($json_url) = @_;
  my $browser = WWW::Mechanize->new();
  eval{
    # download the json page:
    print "Getting json $json_url\n";
    $browser->get( $json_url );
    my $content = $browser->content();
    my $json = new JSON;

    my $json_text = $json->allow_nonref->utf8($content);

    my @decoded_json = decode_json($json_text);
    print Dumper(@decoded_json), length(@decoded_json), "\n";
当我运行它时,我得到了这个错误

Getting json http://api.oodle.com/api/v2/listings?key=TEST&region=usa&category=sale
[[JSON ERROR]] JSON parser crashed! malformed JSON string, neither array, object, number, string or atom, at character offset 0 (before "(end of string)") at ./oodle2.pl line 35.
这让我怀疑我是否正确地获取了数据。url在粘贴到浏览器中时工作正常,我在使用javascript时做得很好,但是perl有问题。我添加了打印转储程序来尝试打印json响应,以便知道数据是否正确输入


谢谢

链接到您的页面不是json。您不能合理地期望json解析器对其进行解析


也许您需要xml解析器?

链接到您的页面不是json。您不能合理地期望json解析器对其进行解析


也许您需要一个xml解析器?

该URL返回xml,而不是JSON

由于OP更新链接而进行编辑


如果你看,它返回的不是一个有效的JSON对象,因此你的解析器失败了。JSON由
jsonoodlappi(
JSON在这里
)包装


如果删除函数调用,它将解析。

该URL返回XML,而不是JSON

由于OP更新链接而进行编辑


如果你看,它返回的不是一个有效的JSON对象,因此你的解析器失败了。JSON由
jsonoodlappi(
JSON在这里
)包装


如果删除函数调用,它将进行解析。

我更新了链接。我忘了包括format=json。仍然是相同的错误。如果你看,它返回的不是一个有效的JSON对象,因此你的解析器失败了。JSON由
jsonOodleApi()包装我喜欢声称返回FOO的api,但实际上返回的几乎与FOO类似的东西。由于该字符串较大,为了获得最佳速度,请使用
substr
删除垃圾<代码>substr$json,0,13='';substr$json,-2=''有关substr的帮助,请参见
perldoc-f substr
。我更新了链接。我忘了包括format=json。仍然是相同的错误。如果你看,它返回的不是一个有效的JSON对象,因此你的解析器失败了。JSON由
jsonOodleApi()包装我喜欢声称返回FOO的api,但实际上返回的几乎与FOO类似的东西。由于该字符串较大,为了获得最佳速度,请使用
substr
删除垃圾<代码>substr$json,0,13='';substr$json,-2=''有关substr的帮助,请参见
perldoc-f substr
。我更新了链接。我忘了包括format=json。还是相同的错误。我更新了链接。我忘了包括format=json。还是一样的错误。嘿,尽管还有很多例子使用它,但不要使用间接对象表示法。这意味着,比如说
my$json=json->new
而不是
my$json=newjson。与后面的语法相关的一些潜在的毛茸茸的bug可以通过使用另一种形式完全避免。有关更多信息,请参阅perldoc perlsub。嘿,尽管还有很多例子使用它,但不要使用间接对象表示法。这意味着,比如说
my$json=json->new
而不是
my$json=newjson。与后面的语法相关的一些潜在的毛茸茸的bug可以通过使用另一种形式完全避免。有关更多信息,请参阅perldoc perlsub。