【发布时间】:2020-09-11 07:10:57
【问题描述】:
对于我需要从 JSON 开始的项目,我转向 JQ,因为我的脚本的其余部分也在 bash 中。 我的主要问题是我无法解析我的输入,因为该文件由几个 JSON 组成:
{"url":"https://www.domain.tld:443","content-length":11089,"status-code":200,"location":"","title":"","vhost":false,"webserver":"Netlify","content-type":"text/html","tls":{"dns_names":["domain.tld","www.domain.tld"],"common_name":["domain.tld","Let's Encrypt Authority X3"],"organization":["Let's Encrypt"],"issuer_common_name":["Let's Encrypt Authority X3","DST Root CA X3"],"issuer_organization":["Let's Encrypt","Digital Signature Trust Co."]},"csp":{"domains":["https://www.domain.tld:443"]},"http2":false,"method":"GET"}
{"url":"http://www.domain.tld:80","content-length":37,"status-code":301,"location":"https://www.domain.tld/","title":"","vhost":false,"webserver":"Netlify","content-type":"text/plain","csp":{"domains":["https://www.domain.tld:443"]},"http2":false,"method":"GET"}
{"url":"https://domain.tld:443","content-length":37,"status-code":301,"location":"https://www.domain.tld/","title":"","vhost":false,"webserver":"Netlify","content-type":"text/plain","tls":{"dns_names":["domain.tld","www.domain.tld"],"common_name":["domain.tld","Let's Encrypt Authority X3"],"organization":["Let's Encrypt"],"issuer_common_name":["Let's Encrypt Authority X3","DST Root CA X3"],"issuer_organization":["Let's Encrypt","Digital Signature Trust Co."]},"csp":{"domains":["https://www.domain.tld:443"]},"http2":false,"method":"GET"}
{"url":"http://domain.tld:80","content-length":33,"status-code":301,"location":"https://domain.tld/","title":"","vhost":false,"webserver":"Netlify","content-type":"text/plain","csp":{"domains":["https://www.domain.tld:443"]},"http2":false,"method":"GET"}
最终目标是提取 URL、状态码和内容长度以重建 JSON 以作为 POST 发送到另一个 API。
另一个问题是我可以正确提取带有 cat file.json | jq .url 的网址,但不能正确提取带有 cat file.json | jq .status-code 的状态代码:jq: error: code/0 is not defined at <top-level>, line 1:
有什么想法吗?
谢谢
【问题讨论】:
-
您希望重构后的 JSON 看起来如何?对于你的直接问题
jq .status-code可以通过jq ."status-code"来解决 -
也在 bash 中并通过 curl 发送,但我认为我不会有问题。我对
cat file.json | jq ."status-code"有同样的错误 -
迭代然后做什么?你的问题不清楚
-
Akerces - 您似乎对 jq 有一个基本的误解,它是面向流的,因此能够读取(和解析)您的 JSON 对象流。正如@inian 所说,唯一的问题是您的“重建” JSON 应该是什么样子。大概这取决于接收端的 API。简而言之,您应该遵循minimal reproducible example 准则。
-
@Akerces:以正确的格式将代码添加到问题中