如何获取包含特定字符的根元素

How to get root elements contains specific character

我有一个 json 文件,想提取数组中包含特定字符的所有根元素。

我的json文件结构:

{
"12": [
    "12",
    "200 OK",
    "{\r\n  \"ResponseText\": null,\r\n  \"RegistrationUserID\": {}\r\n}"
],
"19": [
    "23",
    "200 OK",
    "{\r\n  \"ResponseText\": null,\r\n  \"RegistrationUserID\": {\r\n    \"1\": \"2019***091\",\r\n    \"2\": \"2019****67\"\r\n  }\r\n}"
],
"20": [
    "434",
    "200 OK",
    "{\r\n  \"ResponseText\": null,\r\n  \"RegistrationUserID\": {\r\n    \"1\": \"2019****83\"\r\n  }\r\n}"
],
"333": [
    "25",
    "200 OK",
    "{\r\n  \"ResponseText\": null,\r\n  \"RegistrationUserID\": {\r\n    \"1\": \"2019****32\"\r\n  }\r\n}"
],
"3454": [
    "55",
    "200 OK",
    "{\r\n  \"ResponseText\": null,\r\n  \"RegistrationUserID\": {\r\n    \"1\": \"2019****1\"\r\n  }\r\n}"
],
"23": [
    "66",
    "200 OK",
    "{\r\n  \"ResponseText\": null,\r\n  \"RegistrationUserID\": {\r\n    \"1\": \"2019****5\"\r\n  }\r\n}"
],
"23424": [
    "34",
    "200 OK",
    "{\r\n  \"ResponseText\": null,\r\n  \"RegistrationUserID\": {\r\n    \"1\": \"2019****2\"\r\n  }\r\n}"
],

}

我想提取所有包含“***”的根值。

结果应该是:

19 20 333 3454 23 23424

如何使用 JQ 解析我的 json 文件以提取目标根元素?

当从 JSON 中删除多余的逗号时,并且当使用 -r 命令行选项时,过滤器:

to_entries[]
| select( any(.value[]; test("\*\*\*") ))
| .key

产生流:

19
20
333
3454
23
23424

您可以轻松地以任何您想要的方式打包这些值,例如使用 jq 本身。

@peak 的 是所提问题的正确答案。但是,如果您想 深入研究 包含在顶部数组的第三个元素中的编码 JSON 并只在其中搜索,请使用 fromjson 内置函数:

to_entries[]
| select(any(.value[2] | fromjson | .RegistrationUserID[]; test("\*\*\*")))
| .key
19
20
333
3454
23
23424

Demo