JQ JSON解析 - 使用Todate将时间戳替换为迄今为止,然后将阵列固定



2个问题:

1)我想保持json,但将时间戳更改为人类可读日期,例如" 2016-12-19T09:21:35Z"

{
  "Action": "ALLOW",
  "Timestamp": 1482139256.274,
  "Request": {
    "Country": "US",
    "URI": "/version/moot/beta.json",
    "Headers": [
      {
        "Name": "Host",
        "Value": "static.tiza.com"
      },
      {
        "Name": "User-Agent",
        "Value": "Faraday v0.9.2"
      },
      {
        "Name": "Accept-Encoding",
        "Value": "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
      },
      {
        "Name": "Accept",
        "Value": "*/*"
      },
      {
        "Name": "X-Newrelic-Id",
        "Value": "Vgcs5gbFU123dFBWGwIdAVFdrXBwc="
      },
      {
        "Name": "X-Newrelic-Transaction",
        "Value": "PxQDQVlzZVUd3NKQcrEwWwU"
      }
    ],
    "ClientIP": "107.22.17.51",
    "Method": "GET",
    "HTTPVersion": "HTTP/1.1"
  },
  "Weight": 1
}

我知道我可以使用'todate'JQ功能来做到这一点,但我丢失了所有其他数据

sh# cat temp.json | jq -r '.SampledRequests[].Timestamp | todate'
2016-12-19T09:21:44Z

----------------------------------

第二个问题:2)如何将.haders []的内容从"请求{}"级别中的数组中取出。

来自:

{
  "TimeWindow": {
    "EndTime": 1482156660,
    "StartTime": 1482156420
  },
  "SampledRequests": [
    {
      "Action": "ALLOW",
      "Timestamp": 1482139256.274,
      "Request": {
        "Country": "US",
        "URI": "/version/moot/beta.json",
        "Headers": [
          {
            "Name": "Host",
            "Value": "static.tiza.com"
          },
          {
            "Name": "X-Newrelic-Transaction",
            "Value": "PxQDQVlzZVUd3NKQcrEwWwU"
          }
        ],
        "ClientIP": "107.22.17.51",
        "Method": "GET",
        "HTTPVersion": "HTTP/1.1"
      },
      "Weight": 1
    }
  ],
  "PopulationSize": 89
}

to:

{
    "TimeWindow.EndTime": 1482156660,
    "TimeWindow.StartTime": 1482156420,
    "Action": "ALLOW",
    "Timestamp": 1482139256.274,
    "Request.Country": "US",
    "Request.URI": "/version/moot/beta.json",
    "Headers.Host": "static.tiza.com",
    "Headers.X-Newrelic-Transaction": "PxQDQVlzZVUd3NKQcrEwWwU",
    "ClientIP": "107.22.17.51",
    "Method": "GET",
    "HTTPVersion": "HTTP/1.1",
    "Weight": 1,
    "PopulationSize": 89
}

非常感谢,

moshe

1)使用| =而不是|

2)转换片段的一种方法:

{
  "Headers": [
    {
      "Name": "Host",
      "Value": "static.tiza.com"
    },
    {
      "Name": "User-Agent",
      "Value": "Faraday v0.9.2"
    }
  ]
}

根据需要使用过滤器:

.Headers[] | { ("Headers." + .Name): .Value }

在您的情况下,您可以将以下过滤器用于(2):

.SampledRequests[].Request.Headers[] |=
    { ("Headers." + .Name): .Value }

我将其留给您将所有碎片放在一起: - )

相关内容

最新更新