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

时间:2015-03-10 14:40:17

标签: mysql json perl url

我对Perl相对较新,并试图自我教学。但是我已经阅读了本页面上的所有相关主题和其他内容,但似乎没有一个适合我。

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

目前我甚至无法将数据转储器的结果发送出去。

任何帮助都会很棒。

#!/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)在alarms.pl第14行已弃用。     (也许你应该省略define()?)     格式错误的JSON字符串,无论是数组,对象,数字,字符串还是原子,都在字符偏移量0(在"(字符串结尾)"之前)/opt/csw/share/perl/csw/JSON.pm第168行

1 个答案:

答案 0 :(得分:2)

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

  

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

defined()上拨打@json毫无意义。您实际上只是检查数组中是否有任何数据,因此请将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;