如何拆分以下数组,以便每次只能得到lon和lat点?在perl脚本?
[{"lon":77.594376,"lat":12.971606,"bfg":18000,"xyz":null,"jky":null},{"lon":77.604376,"lat":12.980606,"bfg":18000,"xyz":null,"jky":null},{"lon":77.674376,"lat":12.981606,"bfg":18000,"xyz":null,"jky":null},{"lon":77.684376,"lat":12.982606,"bfg":18000,"xyz":null,"jky":null},{"lon":77.744376,"lat":12.983606,"bfg":18000,"xyz":null,"jky":null},{"lon":77.784376,"lat":12.990606,"bfg":18000,"xyz":null,"jky":null},{"lon":77.804376,"lat":12.991606,"bfg":18000,"xyz":null,"jky":null},{"lon":77.824376,"lat":12.995606,"bfg":18000,"xyz":null,"jky":null},{"lon":77.874376,"lat":12.997606,"bfg":18000,"xyz":null,"jky":null},{"lon":77.894376,"lat":12.999606,"bfg":18000,"xyz":null,"jky":null}]
Run Code Online (Sandbox Code Playgroud)
有帮助吗?
使用j0nesJSON建议的库,这是一个单行程序,打印并在标准中给出:latlon
perl -MJSON -le '$, = "\t"; map { print $_->{lon}, $_->{lat} } @{JSON->new->decode(<>)}'
Run Code Online (Sandbox Code Playgroud)
输出:
77.594376 12.971606
77.604376 12.980606
77.674376 12.981606
77.684376 12.982606
77.744376 12.983606
77.784376 12.990606
77.804376 12.991606
77.824376 12.995606
77.874376 12.997606
77.894376 12.999606
Run Code Online (Sandbox Code Playgroud)
说明:
-MJSON 加载包.$, 将字段分隔符设置为选项卡.map 将print命令映射到解码函数返回的数组引用中的每个哈希.我也建议使用 JSON 库,但如果只是一次性的,你可以这样做:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
my @data;
while (<DATA>) {
if (/"lon":([^,]+),"lat":([^,]+)/) {
push @data, [$1, $2];
}
}
print Dumper \@data;
__DATA__
[{"lon":77.594376,"lat":12.971606,"bfg":18000,"xyz":null,"jky":null},{"lon":77.604376,"lat":12.980606,"bfg":18000,"xyz":null,"jky":null},"lon":77.674376,"lat":12.981606,"bfg":18000,"xyz":null,"jky":null},"lon":77.684376,"lat":12.982606,"bfg":18000,"xyz":null,"jky":null},"lon":77.744376,"lat":12.983606,"bfg":18000,"xyz":null,"jky":null},"lon":77.784376,"lat":12.990606,"bfg":18000,"xyz":null,"jky":null},"lon":77.804376,"lat":12.991606,bfg":18000,"xyz":null,"jky":null},"lon":77.824376,"lat":12.995606,"bfg":18000,"xyz":null,"jk":null},{"lon":77.874376,"lat":12.997606,"bfg":18000,"xyz":null,"jky":null},"lon":77.894376,"lat":12999606,"bfg":18000,"xyz":null,"jky":null}]
Run Code Online (Sandbox Code Playgroud)
结果:
$VAR1 = [
[
'77.594376',
'12.971606'
],
[
'77.674376',
'12.981606'
],
[
'77.744376',
'12.983606'
],
[
'77.804376',
'12.991606'
],
[
'77.874376',
'12.997606'
],
[
'77.894376',
'12.999606'
]
];
Run Code Online (Sandbox Code Playgroud)