繁体   English   中英

如何使用jq解析器提取json对象中的一部分字符串值

[英]How to extract part of a string value in json object using jq parser

我有一个包含对象数组的json文件。 我需要将它们提取到逗号分隔的文件中。 但是,有一个值(密码)具有多个用空格分隔的值。 我需要将它们提取(解析)为两种格式:1)每个值均以逗号分隔。

2)仅在第一个空格之前的第一个值。

我的json文件包含:

[{ "host": "xys.com", "ip": "0.20.0.4", "port": 222, "cipher": "ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD"}]

我使用以下jq命令:

cat test.json | jq -r '.[] | "\(.host),\(.ip),\(.cipher)"' > test_parsing.txt

这给了我:

xys.com,0.20.0.4,TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2 Kx=ECDH     Au=RSA  Enc=AESGCM(128) Mac=AEAD

我想要的是两种形式:

1)用逗号分隔密码值,如果有=符号,则取其后的内容:

xys.com,0.20.0.4,TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256,TLSv1.2,ECDH,RSA,AESGCM(128),AEAD

2)仅提取cipher值的第一部分,即:

xys.com,0.20.0.4,TLSv1.2,ECDHE-RSA-AES128-GCM-SHA256

如何从mu json文件中提取两种格式?

给定的JSON输入,声明的需求和预期的输出之间存在细微的不匹配,因此我将重点介绍需求和给定的输入。

(1)

.[]
| .cipher |= gsub(" *(?<x>[A-Za-z]+)=(?<y>[^ ]+)"; "," + .y)
| .cipher |= (split(" |,") | join(","))
| "\(.host),\(.ip),\(.cipher)"

产生

xys.com,0.20.0.4,ECDHE-RSA-AES128-GCM-SHA256 TLSv1.2,ECDH,RSA,AESGCM(128),AEAD

(2)

.[]
| .cipher |= (split(" ")[0])
| "\(.host),\(.ip),\(.cipher)"

产生

xys.com,0.20.0.4,ECDHE-RSA-AES128-GCM-SHA256

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM