【问题标题】:How to extract certain fields from json output using jq?如何使用 jq 从 json 输出中提取某些字段?
【发布时间】:2019-11-12 17:29:17
【问题描述】:

使用 jq,我如何从下面的 json 输出中提取主机、名称和 date_happened 字段?我在 stackoverflow 上阅读了关于此的另一个线程,但似乎仍然无法理解。

-谢谢

{
    "events": [
        {
            "alert_type": "success",
            "children": [
                {
                    "alert_type": "error",
                    "date_happened": 1573502725,
                    "id": "5188183926379101887"
                },
                {
                    "alert_type": "success",
                    "date_happened": 1573503145,
                    "id": "5188190972457497744"
                }
            ],
            "comments": [],
            "date_happened": 1573502725,
            "device_name": null,
            "host": "i-0e4b192579a9b423b",
            "id": 5188183933173874377,
            "is_aggregate": true,
            "priority": "normal",
            "resource": "/api/v1/events/5188183933173874377",
            "source": "Monitor Alert",
            "tags": [
                "autoscaling_group:app2_backend-asg-prod",
                "availability-zone:us-east-1b",
                "datadog-agent:true",
                "environment:prod",
                "host:i-0e6b192579a9b423b",
                "iam_profile:app2_backend_instance_profile",
                "image:ami-2769055d",
                "instance-type:m4.large",
                "monitor",
                "name:app2_backend-prod",
                "region:us-east-1",
                "role:app2_backend",

【问题讨论】:

  • 您应该发布完整、有效的 JSON 并显示您的预期输出 - 理想情况下,还应包括您尝试过的内容以及其结果与您的预期有何不同。完整/有效的 JSON 很重要,因此人们可以测试他们的答案。
  • 谢谢。使用与我原始帖子中相同的 JSON 文本,并使用您的示例,我没有得到应该是 app2_backend-prod 的“名称”字段。我得到了其他两个领域。 l' -w'l' -w'l[-1]l' "i-0e4b192579a9b423b" 1573502725
  • 这是因为您的 name 并不是真正的 JSON 字段(标签),它是 JSON 字符串值的一部分。如果您想在 JSON 字符串值中匹配它,则需要使用正则表达式匹配:<file.json jtc -w'<host>l' -w'<host>l[-1]<date_happened>l' -w'<^name:>R'
  • 如果你想匹配没有 name: 前缀的值,那么像这样使用它:<file.json jtc -w'<host>l' -w'<host>l[-1]<date_happened>l' -w'<^name:(.*)>R' -T'{{$1}}'
  • 如何获得 OK 的“状态”值? ], "text": "%%%\n查询在主机上恢复:i-0e4b192579a9b423b,name:app2_backend-prod \n\n!snapshot\n\n{{#is_alert}} \n状态:问题\n主机: {{name.name}} \n主机 ID:{{host.name}}\n主机 IP:{{host.ip}}\n{{/is_alert}}\n\n{{#is_warning}} \n状态:问题\n主机:{{name.name}} \n主机 ID:{{host.name}}\n主机 IP:{{host.ip}}\n{{/is_warning}}\n\n\n{{# is_recovery}} \n状态:正常\n主机:

标签: json jq


【解决方案1】:

jq 过滤器:

.events[]
| [.host, 
   (.tags[] | select( test("^name:") ) | sub("name:";"")),
   .date_happened]

生产

 ["i-0e4b192579a9b423b","app2_backend-prod",1573502725]

【讨论】:

    猜你喜欢
    • 2017-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多