我正在尝试使用 windows cmder 为命令行 JSON 处理器执行 jq 命令来转换和输出我保存的现有 JSON 文件。
给出示例 json
[
{
"firstName": "Doug",
"accountNumber": "123456",
"language": "en_US",
"brand": "Tide",
"country": "US",
"branch": "MIA",
"city": "Miami",
"state": "FL",
"zipCode": "33133"
}
]
虽然我能够输出简单过滤器输出的文件,如下所示:
cat sample.json | jq .[] --color-output
或
jq .[] sample.json --color-output
或单个属性(如国家/地区)的过滤器(只要以点表示法出现,其中的任何嵌套项目)
jq .[].country sample.json --color-output
不幸的是,我无法执行任何更复杂的操作,例如提取特定属性或使用允许我使用jqplay等在线资源过滤特定属性
.[] | {accountNumber:.accountNumber, brand:.brand, city:.city, state:.state}
当我尝试在 cmder 中执行与 jqplay 相同类型的命令以将示例 json 数据转换为仅显示某些字段时,我收到以下错误。
jq '.[] | {accountNumber:.accountNumber, brand:.brand, city:.city, state:.state}' sample.json
错误消息:文件名、目录名或卷标语法不正确。
我浏览了一些 jq 文档资源,例如 jq 手册 和 jq 备忘单 ,虽然我看到了它建议如何提取属性的示例,但在引用任何我的示例 JSON 文件如下所示,但对于我之前演示的单个属性选择示例,这些文件读起来很好。我想如果我为 cmder 读取本地或远程 JSON 文件编写了错误的语法,这里的人将很容易识别并帮助纠正。我真的希望能够像大多数东西一样在 windows cmder 上执行此操作,而不是 powershell 或类似的东西。
一些可能有帮助的事情:
map()
而不是 .[]
{key}
与 {key:.key}
jq '.[]|{accountNumber,brand,city,state}' sample.json
# is the same as
jq 'map({accountNumber,brand,city,state})[]' sample.json
显示何时使用
map()
而非 .[]
的示例:jq 'map({accountNumber,city,state})|map(.+{location:"\(.city), \(.state)"})' sample.json