【问题标题】:parsing json in perl在perl中解析json
【发布时间】:2011-05-10 09:56:05
【问题描述】:

我正在尝试在 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 有问题。我添加了打印 Dumper 片段以尝试打印出 json 响应,以便我知道数据是否正确输入

谢谢

【问题讨论】:

  • 嘿,尽管仍有大量使用它的示例,但不要使用间接对象表示法。这意味着,说my $json = JSON->new; 而不是my $json = new JSON;。与后面的语法相关的一些潜在的毛茸茸的错误可以通过使用其他形式完全避免。有关更多信息,请参阅 perldoc perlsub。 perldoc.perl.org/perlsub.html

标签: perl json


【解决方案1】:

该 URL 返回 XML,而不是 JSON。

由于 OP 更新链接而编辑

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

如果你删除函数调用的东西,它会解析。

【讨论】:

  • 我更新了链接。我忘了包括格式= json。还是一样的错误。
  • 如果你看,那不是它返回的有效 JSON 对象,因此你的解析器失败了。 JSON 由 jsonOodleApi(); 包装
  • 我喜欢那些声称返回 FOO,但实际上返回的东西几乎类似于 FOO 的 API。由于这个字符串很大,为了获得最佳速度,请使用substr 删除垃圾。 substr $json, 0, 13 = ''; substr $json, -2 = ''; 请参阅 perldoc -f substr 以获取有关 substr 的帮助。 perldoc.perl.org/functions/substr.html
【解决方案2】:

你链接的页面不是json。你不能合理地期望一个 json 解析器来解析它。

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

【讨论】:

  • 我更新了链接。我忘了包括格式= json。还是一样的错误。
猜你喜欢
  • 2010-12-05
  • 2013-07-08
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 2019-05-07
  • 1970-01-01
  • 1970-01-01
  • 2018-02-07
相关资源
最近更新 更多