首页 > 解决方案 > 当您解析字段值以更新字段时如何更新 jq 中的字段值(也就是重新格式化值)

问题描述

给定一个像这样的起始对象:

[{
  "fieldA": "123",
  "fillDate": "20210101",
  "fieldB": "foo"
},
{
  "fieldA": "456",
  "fillDate": "20210102",
  "fieldB": "bar"
}]

我正在将“fillDate”字段从字符串日期重新格式化为具有以下结构的内容:

fillDate": { "$date" : "2021-01-02T00:00:00Z"},

这样它就可以正确地导入到 MongoDB 数据库中。以下代码适用于数组;但它消除了 json 文档中的所有其他字段。

jq --raw-output '.[ ] | .fillDate | "\"fillDate\": { \"$date\" : \""+ .[0:4] + "-"+ .[4:6]+ "-"+ .[6:9] + "T00:00:00Z\"" + "},"'

所以当前的输出如下所示:

"fillDate": { "$date" : "2021-01-01T00:00:00Z"},
"fillDate": { "$date" : "2021-01-02T00:00:00Z"},

当我需要它看起来像这样时:

{
  "fieldA": "123",
  "fillDate": { "$date" : "2021-01-01T00:00:00Z"},
  "fieldB": "foo"
},
{
  "fieldA": "456",
  "fillDate": { "$date" : "2021-01-02T00:00:00Z"},
  "fieldB": "bar"
}

我尝试了有关如何直接更新 fillDate 字段的其他建议,以使其他字段保持不变(同时还遍历数组);但无法让 jq 接受任何东西而不给出错误。

标签: jq

解决方案


.[] | .fillDate = { "$date": .fillDate |( .[0:4] + "-" + .[5:7] + .[6:9] + "T00:00:00Z")

jqplay 上的片段 https://jqplay.org/s/JmYVXRzTnh


推荐阅读