json - linux下csv文件转json

标签 json linux csv

我有一个像这样的 csv 文件,是从 salesforce 下载的:

"ID","Name","Email"
"1","AAAA","AA@AAA.COM"
"1","AAAA","BB@AAA.COM"
"1","AAAA","CC@CCC.COM"
"2","NNN","NN@NNN.NN"
"3","EEE","CC@WWW.WW"
"3","EEE","DD@OOO.CV"

我需要将该文件转换为 json,如下所示:

[    
 {
    "Id": "1",
    "Name": "AAAA",
    "email": "AA@AAA.COM" ,"BB@AAA.COM","CC@CCC.COM"
  },    
 {
    "Id": "2",
    "Name": "NNN",
    "email": "NN@NNN.NN"
  },
 {
    "Id": "3",
    "Name": "EEE",
    "email": "CC@WWW.WW" ,"DD@OOO.CV"
  },
]

我需要确定哪些行具有相同的 ID 和名称,然后将电子邮件连接到同一行。输出应该是一个 json 文件。

最佳答案

Perl 来救援:

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

use JSON;
use Text::CSV_XS qw{ csv };

my %by_id;
my $csv = 'Text::CSV_XS'->new({binary => 1});
open my $fh, '<', shift or die $!;

$csv->getline($fh); # Skip header
while (my $row = $csv->getline($fh)) {
    my ($id, $name, $email) = @$row;
    $by_id{$id}{Id} = $id;
    $by_id{$id}{Name} = $name;
    push @{ $by_id{$id}{email} }, $email;
}

my $json = 'JSON'->new->canonical;
print $json->encode([map $by_id{$_}, sort { $a <=> $b } keys %by_id]);

关于json - linux下csv文件转json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48571206/

相关文章:

c# - JsonConvert 无法使用括号正确序列化

python - 如何通过忽略boto3中的空元素将JSON数据写入Dynamodb

javascript - Jquery 获取 .each 循环内 slider 的值

linux - SIGSEGV 的原因

python - Psycopg2:将 CSV 数据复制到具有额外列值的表

java - Jackson 能否以不区分大小写的方式检查重复的属性?

c - Bash 没有这样的文件或目录错误(缓存模拟器)

linux - Linux 中域或 IP 存在检查

javascript - 使用 HTML5 在本地写入 CSV 文件

php - windows csv 和 mac csv 有什么区别?