#csv #json #cli #json-file

app csv2json

将CSV转换为JSON文档

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 每月下载次数

MIT 许可证

29KB
607

GitHub release GitHub license Crates.io

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