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