今天,我来分享一下​​jq工具最后的一部分内容:文件格式换。

​jq​​公式可以从​​JSON​​到​​CSV​​的简单换。

提取数据

我们将把​​FunTester.json​​文件的​​article​​数组换为​​CSV​​文件。

首先我们通过管道符将​​article​​内容过滤出来。

fv@FunTester  ~/Downloads  cat FunTester.json| jq '.article[]'
{
"author": "tester1",
"title": "ApiTest"
}
{
"author": "tester2",
"title": "performanceTest"
}
复制代码

这里我们得到了一组​​JSON​​数据,而不是使用​​.artworks​​(不带[]),那样我们会得到一个数组,如下:

fv@FunTester  ~/Downloads  cat FunTester.json| jq '.article'
[
{
"author": "tester1",
"title": "ApiTest"
},
{
"author": "tester2",
"title": "performanceTest"
}
]
复制代码

这里可以理解为带上​​[]​​得到的是一组对象,不带得到了一个数组对象。

组装数据

那么接下来,需要将这些JSON对象换为数组。这里用到之前学到的组合管道符和函数中的语法:增加一个管道符,处理每一个​​JSON​​对象数据。

✘ fv@FunTester  ~/Downloads  cat FunTester.json| jq '.article[]  | [.author,.title] '
[
"tester1",
"ApiTest"
]
[
"tester2",
"performanceTest"
]
复制代码

新的过滤器​​[.author,.title]​​处理返回的​​JSON​​数据,获取到​​JSON​​数据中​​key​​是​​author​​和​​title​​的值,并用逗号​​,​​连接。

输出文档

最后一步,我们可以应用​​@csv​​运算符,该运算符将​​JSON数组​​的格式设置为​​CSV行​​:

fv@FunTester  ~/Downloads  cat FunTester.json| jq '.article[]  | [.author,.title] | @csv'
"\"tester1\",\"ApiTest\""
"\"tester2\",\"performanceTest\""
复制代码

这里看到里面的分号是义的,这是由于​​jq​​默认情况下将​​JSON​​编码应用于其输出。

因此想要获取原始​​CSV​​输出,我们需要添加​​-r​​参数:

fv@FunTester  ~/Downloads  cat FunTester.json| jq -r '.article[]  | [.author,.title] | @csv'
"tester1","ApiTest"
"tester2","performanceTest"