5个不稳定版本
使用旧的Rust 2015
0.3.1 | 2019年3月8日 |
---|---|
0.3.0 | 2019年3月8日 |
0.2.0 | 2019年3月6日 |
0.1.1 | 2018年3月29日 |
0.1.0 | 2018年3月28日 |
#142 in #json-file
34 每月下载次数
29KB
607 行
csv2json
将CSV转换为JSON文件
安装
$ cargo install csv2json
用法
$ csv2json --in <csv file> > <json file>
CSV分隔符
默认情况下,csv通过逗号分割。如果您的csv以不同的方式分隔,可以使用 --delimiter
或 -d
选项指定字符
示例
colon:delimited
one:two
未指定
[
{
"colon:delimited": "one:two"
}
]
使用 -:
[
{
"colon": "one",
"delimited": "two"
}
]
维度分隔符
如果您的CSV包含多维数据,可以使用维度分隔符参数 -
示例
name.first,name.last,age
Daniel,Mason,not telling
不使用分隔符
[
{
"age": "not telling",
"name.first": "Daniel",
"name.last": "Mason"
}
]
设置分隔符 -.
[
{
"name": {
"first": "Daniel",
"last": "Mason"
},
"age": "not telling"
}
]
数组
您可以使用 --arrays
(或 -
) 与 -
来将项分割成数组
name,pets.1,pets.2
Daniel Mason,Yuki,Tinky
不使用数组
[
{
"name": "Daniel Mason",
"pets.1": "Yuki",
"pets.2": "Tinky"
}
]
使用数组 (-. -
)
[
{
"name": "Daniel Mason",
"pets": [
"Yuki",
"Tinky"
]
}
]
注意: 键的数量无关紧要,只需是一个数字即可,例如
name,pets.45,pets.22
Daniel Mason,,Tinky
将产生
[
{
"name": "Daniel Mason",
"pets": [
"",
"Tinky"
]
}
]
移除空字符串
您可以使用 --remove-empty-strings
标志从对象和数组中移除空字符串。
注意: 这将同时应用于对象和数组,可能产生不期望的影响。
name.first,name.last,age,pets.1,pets.2
daniel,,34,,
$ csv2json --in test.csv -d . -a --remove-empty-strings
[
{
"age": "34",
"name": {
"first": "daniel"
},
"pets": []
}
]
移除空对象
您可以使用 --remove-empty-objects
标志从对象和数组中移除空对象。
注意: 这将同时应用于对象和数组,可能产生不期望的影响。
name.first,name.last,pets.1.name,pets.1.type,pets.2.name,pets.2.type
james,smith,,,,
daniel,mason,yuki,cat,tinky,cat
$ csv2json --in test.csv -d . -a --remove-empty-strings --remove-empty-objects
[
{
"name": {
"first": "james",
"last": "smith"
},
"pets": []
},
{
"name": {
"first": "daniel",
"last": "mason"
},
"pets": [
{
"name": "yuki",
"type": "cat"
},
{
"name": "tinky",
"type": "cat"
}
]
}
]
输出到目录
使用 --out-dir <dir>
将 .json
文件写入输出目录。它将使用原始文件名,因此 --in /some/dir/my-data.csv --out-dir /some/other/dir
将生成文件 /some/other/dir/my-data.json
。
根据名称输出到文件
使用--out-name <template>
和--out-dir <dir>
来写入多个json文件,使用模板从原始数据生成它们的名称。例如:
给定test.csv
name.first,name.last,pets.1.name,pets.1.type,pets.2.name,pets.2.type
james,smith,suki,cat,,
daniel,mason,yuki,cat,tinky,cat
使用以下命名模板运行csv2json
$ csv2json --in test.csv --out-dir . --out-name "{name.first}-{name.last}" -d . -a --remove-empty-strings --remove-empty-objects
将产生以下文件
james-smith.json
{
"name": {
"first": "james",
"last": "smith"
},
"pets": [
{
"name": "suki",
"type": "cat"
}
]
}
daniel-mason.json
{
"name": {
"first": "daniel",
"last": "mason"
},
"pets": [
{
"name": "yuki",
"type": "cat"
},
{
"name": "tinky",
"type": "cat"
}
]
}
类型
布尔值
您可以使用--boolean
选项指定包含布尔值的列
type,option.a,option.b,option.c,option.d
true,1,true,anything,TRUE
false,0,false,,FALSE
$ csv2json --in test.csv -d . --boolean option.a --boolean option.b --boolean option.c --boolean option.d
[
{
"option": {
"a": true,
"b": true,
"c": true,
"d": true
},
"type": "true"
},
{
"option": {
"a": false,
"b": false,
"c": false,
"d": false
},
"type": "false"
}
]
数值
您可以使用--numeric
选项指定包含数值的列
number
0
1
-1
1.0
$ csv2json --in test.csv --numeric number
[
{
"number": 0
},
{
"number": 1
},
{
"number": -1
},
{
"number": 1.0
}
]
依赖
~3MB
~36K SLoC