jq - 当您解析字段值以更新字段时如何更新 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 接受任何东西而不给出错误。
解决方案
.[] | .fillDate = { "$date": .fillDate |( .[0:4] + "-" + .[5:7] + .[6:9] + "T00:00:00Z")
jqplay 上的片段 https://jqplay.org/s/JmYVXRzTnh
推荐阅读
- bash - 基于视频音频编解码器的动作
- git - Git:在其他提交之上重放一系列提交
- windows - Windows 预览版破坏了事务文件系统?
- ios - 如何从 Firebase 获取图像,从最新到最旧?
- xml - 将 XSL 节点转换为逗号分隔的 html 属性
- javascript - 关于res.render和EJS文件中调用方法的问题
- angular - mat-table angular 5中的浮动滚动条
- c - Objective-c:为什么我继承的这段代码中使用了strtol方法?
- notifications - Android Pie 上的通知操作按钮文本总是全部大写
- java - 如何在 Java Weka API 中使用类不平衡技术 (SMOTE)?