如何在perl中拆分这个数组?

SSS*_*SSS 5 arrays perl

如何拆分以下数组,以便每次只能得到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)

有帮助吗?

j0n*_*nes 7

您可以在Perl中使用JSON库来解析您的JSON字符串.之后,您将拥有一组哈希,您可以迭代并提取纬度/经度值.

  • 只需将文件读入字符串并在此字符串上使用JSON库即可. (3认同)

Tho*_*hor 5

使用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命令映射到解码函数返回的数组引用中的每个哈希.


fle*_*esk 1

我也建议使用 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)