如何从Windows cmder对外部json文件执行多属性选择jq命令

问题描述 投票:0回答:1

我正在尝试使用 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 或类似的东西。

json windows jq cmder
1个回答
0
投票

一些可能有帮助的事情:

  • 单引号你的命令
  • 对于嵌套或复杂的命令,请使用
    map()
    而不是
    .[]
  • {key}
    {key:.key}
  • 相同
jq '.[]|{accountNumber,brand,city,state}' sample.json
# is the same as
jq 'map({accountNumber,brand,city,state})[]' sample.json

显示何时使用

map()
而非
.[]
的示例:
map 返回一个数组,因此您可以在它之后立即通过管道传输另一个地图命令

jq 'map({accountNumber,city,state})|map(.+{location:"\(.city), \(.state)"})' sample.json
© www.soinside.com 2019 - 2024. All rights reserved.