【问题标题】:How to Parse JSON from a URL in Perl如何从 Perl 中的 URL 解析 JSON
【发布时间】:2021-06-05 12:07:10
【问题描述】:

我正在尝试从网站解析 JSON。我在解析 JSON 时遇到问题。我收到以下错误:

格式错误的 JSON 字符串,既不是标签、数组、对象、数字、字符串或 原子,在字符偏移量 0(“

网址是: https://coinmarketcap.com/coins

任何帮助将不胜感激。 我的代码 sn-p 是:

use strict;
use warnings;
use LWP::UserAgent;
use LWP::Simple;
use HTML::TreeBuilder;
use JSON;
use IO::Socket::SSL;
use Data::Dumper;

sub getJSON {
    my $url = $_[0] or die "URL missing!\n";
    
    my $ua = LWP::UserAgent->new(
    ssl_opts => {
        SSL_verify_mode => SSL_VERIFY_NONE(),
        verify_hostname => 0,
    }
);
    my $req = HTTP::Request->new( GET => $url );
$req->content_type('application/json');
my $res = $ua->request($req);

 die $res->status_line unless $res->is_success;

my $json = JSON->new();
my $json_text = $json->decode( $res->content );
}

【问题讨论】:

  • 这段代码的主要问题是你访问的 URL 实际上并没有返回 JSON。所以错误消息是完全正确的 - 你试图将某些东西解释为 JSON 而不是 JSON。因此,解决方法是使用正确的 URL,不管它是什么。除此之外:在 GET 请求上设置 Content-Type 标头没有意义。此标头描述请求正文中内容的类型。但是由于这是一个 GET 请求,所以没有请求主体,这也意味着这个不存在的主体没有类型。
  • 我自己找到了解决方案。我用树生成器扫描了网站页面的 HTML,并提取了包含带有标签 ID 的 json 的标签。我把整个 json 作为一个字符串放在一个变量中。

标签: json perl


【解决方案1】:

我自己找到了解决方案。我使用树构建器(CPAN 上可用的 Perl API)扫描了网站页面的 HTML,并提取了包含 json 及其标签 ID 的标签。我将整个 json 作为字符串放在一个变量中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-05
    • 2015-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    相关资源
    最近更新 更多