【发布时间】: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 作为一个字符串放在一个变量中。