如何使用jq将对象的日期时间键复制到对应内部对象中?
解决方案:将JSON对象的外层时间键移入子对象并转换为数组
针对你的需求,我们可以分两步(或者一步到位)完成操作,下面用JavaScript为例给出具体实现:
步骤1:为每个子对象添加date属性
首先遍历原始对象的键值对,把外层的时间戳键作为date属性添加到对应的子对象中:
const originalData = { "2018-05-15T22:00:00Z": { "foo": "0.0", "bar": "90.0" }, "2018-05-15T22:30:00Z": { "foo": "0.0", "bar": "70.0" } }; // 生成包含date字段的新对象 const dataWithDate = Object.fromEntries( Object.entries(originalData).map(([date, obj]) => [date, { ...obj, date }]) );
执行后得到你需要的中间结果:
{ "2018-05-15T22:00:00Z": { "date": "2018-05-15T22:00:00Z", "foo": "0.0", "bar": "90.0" }, "2018-05-15T22:30:00Z": { "date": "2018-05-15T22:30:00Z", "foo": "0.0", "bar": "70.0" } }
步骤2:转换为数组
如果最终需要的是数组格式,直接提取新对象的所有值即可:
const finalArray = Object.values(dataWithDate);
一步到位的简化写法
其实不需要单独保留中间的对象,我们可以直接把两步合并,一次完成转换:
const finalArray = Object.entries(originalData).map(([date, obj]) => ({ ...obj, date }));
最终得到的数组结果如下:
[ { "date": "2018-05-15T22:00:00Z", "foo": "0.0", "bar": "90.0" }, { "date": "2018-05-15T22:30:00Z", "foo": "0.0", "bar": "70.0" } ]
代码说明
Object.entries():将原始对象转换为[键, 值]形式的数组,方便我们同时获取时间戳和对应的子对象- 扩展运算符
...obj:用于复制子对象原有的所有属性,避免直接修改原始数据 map():遍历数组并生成新的对象/数组,满足我们的转换需求
内容的提问来源于stack exchange,提问作者Matt
相关产品推荐
相关产品推荐

