【发布时间】:2022-10-07 19:32:47
【问题描述】:
我有几个项目数据的 CSV 文件,用于我正在搞乱的游戏,我需要将其转换为 JSON 以供使用。数据可能非常不规则,每条记录有几个空字段,这会产生一种丑陋的 JSON 输出。
带有虚拟值的示例:
Id,Name,Value,Type,Properties/1,Properties/2,Properties/3,Properties/4
01:Foo:13,Foo,13,ACME,CanExplode,IsRocket,,
02:Bar:42,Bar,42,,IsRocket,,,
03:Baz:37,Baz,37,BlackMesa,CanExplode,IsAlive,IsHungry,
转换后的输出:
[
{
"Id": "01:Foo:13",
"Name": "Foo",
"Value": 13,
"Type": "ACME",
"Properties": ["CanExplode", "IsRocket", ""]
},
{
"Id": "02:Bar:42",
"Name": "Bar",
"Value": 42,
"Type": "",
"Properties": ["IsRocket", "", ""]
},
{
"Id": "03:Baz:37",
"Name": "Baz",
"Value": 37,
"Type": "BlackMesa",
"Properties": ["CanExplode", "IsAlive", "IsHungry"]
}
]
到目前为止,我使用Miller 非常成功。我已经设法从 CSV 中删除完全空的列,并将 Properties/X 列聚合到一个数组中。
但现在我想做两件事来改进输出格式,使 JSON 的使用更容易:
- 从
Properties数组中删除空字符串"" - 将其他空字符串
""(例如第二条记录的Type)替换为null
期望的输出:
[
{
"Id": "01:Foo:13",
"Name": "Foo",
"Value": 13,
"Type": "ACME",
"Properties": ["CanExplode", "IsRocket"]
},
{
"Id": "02:Bar:42",
"Name": "Bar",
"Value": 42,
"Type": null,
"Properties": ["IsRocket"]
},
{
"Id": "03:Baz:37",
"Name": "Baz",
"Value": 37,
"Type": "BlackMesa",
"Properties": ["CanExplode", "IsAlive", "IsHungry"]
}
]
有没有办法通过Miller 实现这一目标?
我当前的命令是:
-
mlr -I --csv remove-empty-columns file.csv清理列 -
mlr --icsv --ojson --jflatsep '/' --jlistwrap cat file.csv > file.json用于转换
【问题讨论】: