首页 > 解决方案 > 使用 JQ 在元素名称中直接访问带有冒号/特殊字符的 JSON 元素

问题描述

我正在尝试遵循手册和示例,如果您想专门在 JQ 输出中而不输出整个结构,那么如何处理冒号元素名称并不是特别清楚。

Raw:{"UpdateResponseMessage":{"Header":{"com:TransactionID":"5e5b1750-7be7-11e8-886a-838029aca397","com:TimeStamp":"2018-06-29T21:57:08.549Z","com:SourceSystem":"Call","com:Status":"Success"}},"level":"info","message":"UpdateResponseMessage being sent.","timestamp":"2018-06-29T21:57:08.549Z"}

的输出jq-win64 [.] test.log如下:

 [  {
"UpdateResponseMessage": {
  "Header": {
    "com:TransactionID": "5e5b1750-7be7-11e8-886a-838029aca397",
    "com:TimeStamp": "2018-06-29T21:57:08.549Z",
    "com:SourceSystem": "Call",
    "com:Status": "Success"
  }
},

]

我试图只调用“com:Status”和“com:TransactionID”,但它要么给我一个语法错误(INVALID_CHARACTER),要么我尝试过的所有内容都没有数据“null”。

以下为 TransactionID 和 Status 输出“null”。

以前有报道称人们试图弄清楚(问题741745建议使用上述JSON.net代码以及一些变体试图遵循指导的jq <x.json '.["key::name"]'类似问题,但JQ 手册没有具体解决的示例这种情况也好。

以下至少不会出错,但不会输出值,只是名称中包含“:”的两个元素的“NULL”。如果我像在评论中一样添加```标记在外场我再次得到“Invalid_Character”。

             elif .UpdateResponseMessage then 
            # ( .UpdateResponseMessage .Header | [`.["com::TransactionID"]`] ) 
             ( .UpdateResponseMessage .Header | ["Response", `.["com::TransactionID"], .["com::Status"]] ) 

输出:

“响应”、“空”、“空”

但我需要的是:

"响应","5e5b1750-7be7-11e8-886a-838029aca397","成功"

标签: jq

解决方案


推荐阅读