从Perl格式获取数据并更新SQL表



我对Perl比较陌生,并试图自学。但是,我已经阅读了此页面上的所有相关线程和其他主题,但它们似乎都不适合我。

下面是我的代码 - 尝试从 Perl 格式的网页中获取大量数据并将其导出以更新 SQL 表中的值。

目前,我什至无法将数据转储URL的结果。

任何帮助都会很棒。

#!/usr/bin/perl
#
use LWP::Simple;
use warnings;
use strict;
use JSON qw( decode_json from_json );
use LWP::Simple;
use Data::Dumper;
use utf8;
my $url = "http://.sensitivedata.txt";
my @json= from_json(get ( $url ));
die "Couldn't get $url" if not defined @json;
##my $decoded_json = decode_json( @json);
print Dumper @json;
exit 0;

这是它给我的错误消息: 定义 (@array) 在第 14 行 alarms.pl 已弃用。 (也许你应该省略定义的()? 格式错误的 JSON 字符串,既不是数组、对象、数字、字符串或原子,字符偏移量为 0(在"(字符串末尾)"之前),位于/opt/csw/share/perl/csw/JSON.pm 第 168 行

错误消息非常清楚a)问题是什么以及b)如何摆脱它。

定义 (@array) 在第 14 行 alarms.pl 已弃用。(也许你应该 只是省略定义的()?

@json上打电话给defined()是没有意义的。您实际上只是在检查数组中是否有任何数据,因此请将if not defined @json替换为if not @json

这将摆脱错误消息。但是你仍然会遇到一个问题,因为你的程序现在几乎肯定会在同一行上死亡,并显示错误消息"无法获取http://.sensitivedata.txt"。这可能不是一个准确的错误消息。

问题是此错误可能由两个问题引起。要么无法获取数据,要么无法分析数据。您的错误消息仅提及其中一种可能性。最好将错误检查一分为二。

# Step 1: Get the data
my $raw_json = get($url);
die "Can't get data from $url" unless $raw_json;
# Step 2: Parse the data
my @json = from_json($raw_json);
if (!@json) {
  warn $raw_json;
  die "Can't parse data from $url";
}

使用更多这样的代码,您将能够看到问题所在。

这里还有一个小问题,所以先发制人你的下一个问题......

from_json始终返回标量。它将是哈希引用或数组引用(取决于您获得的 JSON)。看起来您正在期待一个数组。您需要将引用存储在标量中并取消引用它。

my $json_array_ref = from_json($raw_json);
if (!@$json_array_ref) {
  warn $raw_json;
  die "Can't parse data from $url";
}
my @json = @$json_array_ref;

最新更新