Perl将JSON格式转换为逗号分隔值

时间:2016-09-15 20:57:33

标签: json perl csv

我正在使用以JSON格式打印输出的Web服务,如下所示,

{
  'message' => '',
  'data' => [
              {
                'name' => 'Lee calls',
                'empid' => '1289328',
                'desc_id' => 'descl23423..23431'
              },
              {
                'name' => 'Lee calls',
                'empid' => '23431223',
                'desc_id' => 'descl23423..234324'
              }
            ],
  'status' => 'success'
};

我只需要转换数据'项目值为CSV格式。需要的是,我必须创建将在CLI(命令行界面)或Linux终端中执行的perl文件。因此,perl将从Webservice中提取内容,并且必须将JSON输出转换为CSV格式。

你能建议我这个怎么办?

1 个答案:

答案 0 :(得分:1)

使用JSON将JSON字符串读入Perl数据结构。然后,使用Text::CSV_XS以CSV格式创建输出:

#!/usr/bin/perl
use warnings;
use strict;

use JSON;
use Text::CSV_XS;

my $json = '[ {
                "name" : "Lee calls",
                "empid" : "1289328",
                "desc_id" : "descl23423..23431"
              },
              {
                "name" : "Lee calls",
                "empid" : "23431223",
                "desc_id" : "descl23423..234324"
              } ]';
my $struct = decode_json($json);

my $csv = 'Text::CSV_XS'->new({ binary => 1, eol => "\n" });
open my $OUT, '>:encoding(UTF-8)', 'output.csv' or die $!;
$csv->print($OUT, [ @$_{qw{ name empid desc_id }} ]) for @$struct;
close $OUT or die $!;