【问题标题】:JSON: convert epoch timestamp - jq: error (at <stdin>): Cannot index string with string "timestamp"JSON:转换纪元时间戳 - jq:错误(在 <stdin> 处):无法使用字符串“timestamp”索引字符串
【发布时间】:2018-01-14 08:43:02
【问题描述】:

原始文件

$ < galera-healthcheck.stdout.log  jq '.' | head -n 40
{
  "timestamp": "1499779398.544612646",
  "source": "Galera Healthcheck",
  "message": "Galera Healthcheck.Opened DB connection",
  "log_level": 1,
  "data": {
    "dbHost": "0.0.0.0",
    "dbPort": 3306,
    "dbUser": "galera-healthcheck"
  }
}
{
  "timestamp": "1499779398.544713974",
  "source": "Galera Healthcheck",
  "message": "Galera Healthcheck.Serving healthcheck endpoint",
  "log_level": 1,
  "data": {
    "url": "http://0.0.0.0:9200/"
  }
}
{
  "timestamp": "1499779398.544794559",
  "source": "Galera Healthcheck",
  "message": "Galera Healthcheck.Attempting to GET endpoint...",
  "log_level": 1,
  "data": {
    "url": "http://0.0.0.0:9200/"
  }
}
{
  "timestamp": "1499779398.545407295",
  "source": "Galera Healthcheck",
  "message": "Galera Healthcheck.Failed to process request",
  "log_level": 2,
  "data": {
    "error": "Cannot get status from galera"
  }
}
{
  "timestamp": "1499779398.545511246",

我希望相同的原始文件,但时间戳为人类可读形式。

我试过了:

< galera-healthcheck.stdout.log  jq 'map(if .timestamp then .timestamp |= todate else . end)'

文件中的每一行都出现此错误

(...)
jq: error (at <stdin>:968): Cannot index string with string "timestamp"
jq: error (at <stdin>:969): Cannot index string with string "timestamp"
jq: error (at <stdin>:970): Cannot index string with string "timestamp"
jq: error (at <stdin>:971): Cannot index string with string "timestamp"
jq: error (at <stdin>:972): Cannot index string with string "timestamp"
jq: error (at <stdin>:973): Cannot index string with string "timestamp"
jq: error (at <stdin>:974): Cannot index string with string "timestamp"
jq: error (at <stdin>:975): Cannot index string with string "timestamp"
jq: error (at <stdin>:976): Cannot index string with string "timestamp"
jq: error (at <stdin>:977): Cannot index string with string "timestamp"
jq: error (at <stdin>:978): Cannot index string with string "timestamp"
jq: error (at <stdin>:979): Cannot index string with string "timestamp"
jq: error (at <stdin>:980): Cannot index string with string "timestamp"
jq: error (at <stdin>:981): Cannot index string with string "timestamp"
jq: error (at <stdin>:982): Cannot index string with string "timestamp"
jq: error (at <stdin>:983): Cannot index string with string "timestamp"
jq: error (at <stdin>:984): Cannot index string with string "timestamp"
jq: error (at <stdin>:985): Cannot index string with string "timestamp"
jq: error (at <stdin>:986): Cannot index string with string "timestamp"
jq: error (at <stdin>:987): Cannot index string with string "timestamp"
jq: error (at <stdin>:988): Cannot index string with string "timestamp"
jq: error (at <stdin>:989): Cannot index string with string "timestamp"
jq: error (at <stdin>:990): Cannot index string with string "timestamp"
jq: error (at <stdin>:991): Cannot index string with string "timestamp"
jq: error (at <stdin>:992): Cannot index string with string "timestamp"
jq: error (at <stdin>:993): Cannot index string with string "timestamp"
jq: error (at <stdin>:994): Cannot index string with string "timestamp"
jq: error (at <stdin>:995): Cannot index string with string "timestamp"
jq: error (at <stdin>:996): Cannot index string with string "timestamp"
jq: error (at <stdin>:997): Cannot index string with string "timestamp"
jq: error (at <stdin>:998): Cannot index string with string "timestamp"

第一次回答后更新:

放弃对“地图”的调用。

'todate' 期望它的输入是数字,所以 您需要添加对“tonumber”的调用。

时间戳仍为纪元格式,人类不可读:

< galera-healthcheck.stdout.log  jq '(if .timestamp then .timestamp |= tonumber else . end)' | head
{
  "timestamp": 1499779398.5446126,
  "source": "Galera Healthcheck",
  "message": "Galera Healthcheck.Opened DB connection",
  "log_level": 1,
  "data": {
    "dbHost": "0.0.0.0",
    "dbPort": 3306,
    "dbUser": "galera-healthcheck"
  }

【问题讨论】:

    标签: json timestamp jq epoch


    【解决方案1】:
    1. 放弃对“地图”的调用。

    2. 'todate' 期望其输入是数字,因此您需要添加对 'tonumber' 的调用:

      .timestamp |= (tonumber|todate)
      

    【讨论】:

    • “add”表示“添加”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-27
    • 1970-01-01
    相关资源
    最近更新 更多