如何获取包含特定字符的根元素
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
我有一个 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 的 fromjson
内置函数:
to_entries[]
| select(any(.value[2] | fromjson | .RegistrationUserID[]; test("\*\*\*")))
| .key
19
20
333
3454
23
23424