【问题标题】:jq extract key with - under powershell [duplicate]jq在powershell下使用-提取密钥[重复]
【发布时间】:2018-11-02 13:13:51
【问题描述】:

我在 Windows 环境中使用 jq 1.5 来修改我从 Amazon s3 接收的 json 对象。我有一个有趣的问题。我使用 jq 来提取对象的单个键:

{
  "s3_direct_url": "https://fanzo-photos.s3.amazonaws.com/photos/images/034/005/322/screen1.jpg",
  "url": "https://fanzo-photos.s3.amazonaws.com",
  "fields": {
    "key": "photos/images/034/005/322/screen1.jpg",
    "success_action_status": "200",
    "Content-Type": "image/jpeg",
    "acl": "public-read",
    "policy": "eyJleHBpcmF0aW9uIjoiMjAxOC0xMS0wMlQxMzo0NzoxNVoiLCJjb25kaXRpb25zIjpbeyJidWNrZXQiOiJmYW56by1waG90b3MifSx7ImtleSI6InBob3Rvcy9pbWFnZXMvMDM0LzAwNS8zMjIvc2NyZWVuMS5qcGcifSx7InN1Y2Nlc3NfYWN0aW9uX3N0YXR1cyI6IjIwMCJ9LHsiQ29udGVudC1UeXBlIjoiaW1hZ2UvanBlZyJ9LHsiYWNsIjoicHVibGljLXJlYWQifSx7IngtYW16LWNyZWRlbnRpYWwiOiJBS0lBSlkzWVRCV1NMQzQ2SFdCQS8yMDE4MTEwMi91cy1lYXN0LTEvczMvYXdzNF9yZXF1ZXN0In0seyJ4LWFtei1hbGdvcml0aG0iOiJBV1M0LUhNQUMtU0hBMjU2In0seyJ4LWFtei1kYXRlIjoiMjAxODExMDJUMTI0NzE1WiJ9XX0=",
    "x-amz-credential": "AKIAJY3YTBWSLC46HWBA/20181102/us-east-1/s3/aws4_request",
    "x-amz-algorithm": "AWS4-HMAC-SHA256",
    "x-amz-date": "20181102T124715Z",
    "x-amz-signature": "52d8246536e8743fba8e7668cb65a08a1142221d54a58676b6ab14e3835482a3"
  },
  "id": 34005322,
  "media_type": "InputMedia"
}

如果我从“字段”对象中提取信息,而键名中没有“-”,则可以正常工作。如果我尝试提取名称中带有“-”的密钥,则会出现以下错误:

 jq: error: amz/0 is not defined at <top-level>, line 1:
.fields.x-amz-credential          
jq: error: credential/0 is not defined at <top-level>, line 1:
.fields.x-amz-credential              
jq: 2 compile errors
exit status 3

更新: 在使用常见问题解答和“我重建 jq 命令并在 jqplay:.fields.”Content-Type” 中对其进行测试后,它按预期工作。在 powershell 下,该变体不起作用,因为 powershell 没有例外引用。

.\jq .fields."Content-Type" jq: error: Type/0 is not defined at <top-level>, line 1: .fields.Content-Type jq: 1 compile error

BR 蒂莫

【问题讨论】:

    标签: json key jq


    【解决方案1】:

    有什么建议吗?

    是的!如果在线jq手册中找不到答案,请查看jqFAQ

    ?:如何使用连字符或 $ 或其他方式访问键的值 有特殊字符吗?为什么 .a.["$"] 会产生语法错误?

    A:访问键值的基本形式是 .["KEYNAME"] 其中“KEYNAME”是任何有效的 JSON 字符串,但 jq 的最新版本 也允许 ."KEYNAME"。

    使用基本形式可能需要显式使用管道符号,如 在 .["a-b"]|.["x-y"] 中,但这可以缩写为 .["a-b"]["x-y"]。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-05-09
      • 1970-01-01
      • 2021-02-15
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 2017-01-29
      相关资源
      最近更新 更多