【问题标题】:jq json parsing - replace timestamp to date using todate, and flat an arrayjq json 解析 - 使用 todate 将时间戳替换为日期,并将数组变平
【发布时间】:2016-12-19 12:10:24
【问题描述】:

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)如何将.Headers[]的内容从“Request{}”层级下的数组中取出来。

来自:

{
  "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
}

收件人:

{
    "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
}

非常感谢,

莫舍

【问题讨论】:

  • 对于谁,我用这个:[leaf_paths as $path | {“关键”:$路径|地图(tostring) | join("."), "value": getpath($path)}] | from_entries

标签: json bash parsing aws-cli jq


【解决方案1】:

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 }

我会让你把所有的部分放在一起:-)

【讨论】:

  • 谢谢@peak,我还在为第二个问题苦苦挣扎。
  • 仍然不是我想要的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多