将json从web读入perl变量

时间:2013-07-11 19:11:06

标签: json perl

我在使用网络链接打开的JSON文件时遇到了一些问题。我已经调整了我用于打开本地kml文件的代码,所以问题可能是perl处理json或打开在线文件的不同方式......?

'$ input {place}'来自我的html表单

$inputname = $input{place};
$sjson ="http://api.geonames.org/searchJSON?q=$inputname&maxRows=1&username=rsgs";
open INPUT, "<$sjson";
  $sjsoncont.=<INPUT>;  
  close INPUT;

当我通过打印$ sjsoncont进行测试时它是空的?为什么呢?

2 个答案:

答案 0 :(得分:5)

您不能简单地“打开”远程网址。使用LWP :: UserAgent或LWP :: Simple执行此任务。例如:

use LWP::Simple;
my $sjsoncont = get "http://api.geonames.org/searchJSON?q=Berlin&maxRows=1&username=rsgs";

顺便说一句,如果你使用open():

,你应该总是检查返回值
open my $INPUT, "<", $file or die "Can't open $file: $!";

(或use autodie

答案 1 :(得分:3)

您可以使用IO::All

执行此操作
use IO::All;
my $sjson < io->http("http://api.geonames.org/searchJSON?q=$inputname&maxRows=1&username=rsgs");
print $sjson;

要使用此功能,请安装IO::All::HTTP。您可以通过从命令行运行cpan IO::All::HTTP来执行此操作。

看起来你没有使用警告和严格。要开发perl,你真的必须这样做。您编写的每个脚本都应以

开头
use strict;
use warnings;

另外,如果您遇到不理解的perl错误,请添加以下错误:

use diagnostics;