【问题标题】:Get Data from Perl format and update sql table从 Perl 格式获取数据并更新 sql 表
【发布时间】:2015-05-12 01:31:17
【问题描述】:

我对 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;

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

【问题讨论】:

  • “格式错误的 JSON 字符串,既不是数组、对象、数字、字符串也不是原子”表示 get 没有返回有效的 JSON。打印 get 的结果,然后尝试将其解析为 JSON 以验证其外观:my $content = get $url; print $content; 将结果编辑到您的帖子中。
  • 我现在试试,谢谢。 url 是 .txt 的 url 这会影响 JSON 数据吗?

标签: mysql json perl url


【解决方案1】:

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

defined(@array) 在alarms.pl 第14行被弃用。(也许你应该 只需省略defined()?)

@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;

【讨论】:

    猜你喜欢
    • 2014-05-10
    • 1970-01-01
    • 2021-11-08
    • 1970-01-01
    • 2017-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多