2016-09-15 95 views
-1

我使用的Web服務,在如下JSON格式打印輸出,Perl的轉換JSON格式爲逗號分隔值

{ 
    '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將從Web服務中提取內容,並且必須將JSON輸出轉換爲CSV格式。

你能就此建議我該怎麼辦?

+2

你有你想如何表示JSON在CSV的想法,這不是JSON – naomik

+4

?沒有通用的方法來表示CSV中的嵌套數據結構,您將不得不指定某些內容。如果你更多地解釋你的問題的背景可能會有所幫助。 – Borodin

+0

你到目前爲止嘗試過什麼?例如,你看過哪些Perl模塊,爲什麼它們不適合你的任務? –

回答

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 $!;