需要帮助使用 jtc 或 jq 从 json 对象中删除具有特殊字符 @ 的元素

Need help deleting elements with special character @ from json object with jtc or jq

我正在尝试识别以 @t 开头的键的对象元素。我的目标是将它们一起从对象中删除。

示例输入

{
  "process_state": {
    "@user_id": "john smith",
    "@t39ee396f50": 1,
    "@t375b0311e8": 1,
    "@t12dd92bf45": 1
     }
}

预期输出

{
  "process_state": {
    "@user_id": "john smith",
     }
}

我试过使用 jq 和 jtc 来实现这一点,但两者似乎都与领先的 @ 符号作斗争。我假设这是我的代码的格式问题。我可以使用通配符吗?我尝试了几种方法都没有成功。

JQ

jq'。 |=地图(select(。|包含(“@t”)|不))'

错误:无法检查字符串 ("@t") 的包含

联合训练中心

<文件 jtc -w'l:'

没有错误,但@t* 字段仍然存在于 json 对象中。

非常感谢任何帮助。

我们将使用 test("^@t") 而不是 contains("@t"),因为我们要检查 leading @t。但这不是您收到该错误的原因。您在 |= 的 left-hand 侧有错误的对象,并且 map 没有按照您对对象的想法进行操作。

两种解决方案:

  • 使用过滤(就像您尝试的那样):

    .process_state |= with_entries(
       select( .key | test("^@t") | not )
    )
    

    Demo 在 jqplay

  • 正在使用删除:

    .process_state |= del(
       .[
          keys_unsorted[] |
          select( test("^@t") )
       ]
    )
    

    Demo 在 jqplay