我将翻译以下关于IT技术的内容:
将其转化为以下格式:
或者
每个文件中都有成百上千(数百个)的对象,这些对象的字段值不同。我需要遍历并用新格式替换每个
我可以手动完成此操作,但需要全职工作一两天才能完成(我知道,我尝试过处理一个文件,但半小时后我放弃了,花费的时间太长了)。
如何通过编程实现呢?正则表达式?Sed?还是其他什么?
最后说明:我只需要做一次。之后,我就不需要再做了。
感谢任何提示!
示例JSON:(想象一下真实的JSON有30,000行!):)
我正在寻找一种最有效的方法来替换文件中的JSON对象。
20150628 - 此帖子底部更新
以下是情况:
我有许多JSON文件,这些文件中有大量的JSON代码(有时达到20-30K行),这些都是我们各种测试程序的配置。最近需要更改一个对象,从原来的这个:
"createdAt": {
"year": 2014,
"month": 11,
"dayOfMonth": 24,
"hourOfDay": 2,
"minute": 22,
"second": 54
}
将其转化为以下格式:
"createdAt":"2015-05-12T21:14:51Z"
让我们更简单一些。 我想要替换我的JSON对象中所有的createdAt
和updatedAt
字段(可能有很多个)为:
"createdAt":"2015-05-12T21:14:51Z"
或者
"updatedAt":"2015-05-12T21:14:51Z"
每个文件中都有成百上千(数百个)的对象,这些对象的字段值不同。我需要遍历并用新格式替换每个
createdAt
和updatedAt
对象。日期并不重要,可以是任何值。我可以手动完成此操作,但需要全职工作一两天才能完成(我知道,我尝试过处理一个文件,但半小时后我放弃了,花费的时间太长了)。
如何通过编程实现呢?正则表达式?Sed?还是其他什么?
最后说明:我只需要做一次。之后,我就不需要再做了。
感谢任何提示!
示例JSON:(想象一下真实的JSON有30,000行!):)
{ "products": [
{
"displayOrder": 3,
"product": {
"foo": "bar",
"createdAt": {
"year": 2014,
"month": 11,
"dayOfMonth": 24,
"hourOfDay": 2,
"minute": 22,
"second": 54
},
"description": "Fizz Bin",
"id": "8765309",
"modelNumber": "call-it",
"name": "Boom",
"price": {
"amount": 100,
"currency": "USD"
},
"type": "Active",
"updatedAt": {
"year": 2015,
"month": 1,
"dayOfMonth": 27,
"hourOfDay": 19,
"minute": 33,
"second": 25
}
}
},
{
"displayOrder": 4,
"product": {
"foo": "barx",
"createdAt": {
"year": 2013,
"month": 1,
"dayOfMonth": 4,
"hourOfDay": 3,
"minute": 2,
"second": 5
},
"description": "Fizzy Stuff",
"id": "876511111",
"modelNumber": "zoom-zoom-1000",
"name": "Zoom Zoom 1000",
"price": {
"amount": 1000,
"currency": "USD"
},
"type": "Active",
"updatedAt": {
"year": 2011,
"month": 5,
"dayOfMonth": 25,
"hourOfDay": 15,
"minute": 35,
"second": 55
}
}
}
]
}
更新 20150628
对于那些想知道的人,这是我编写的gulpfile,以实现我想要的精确内容。它基于已接受的答案。当找到我要查找并替换的内容时,它将递归地搜索树。虽然它不是世界上最漂亮的东西,但它确实做到了我所需要的,并为我节省了几个星期的手动时间。处理所有文件的总时间?少于100毫秒。太神奇了。
var gulp = require('gulp');
var change = require('gulp-change');
function searchTreeForDates(obj) {
if(typeof(obj) === 'object') {
for (var key in obj) {
if (typeof(obj[key]) === 'object' && (key === 'createdAt' || key === 'updatedAt')) {
obj[key] = "2015-06-29T00:53:00Z";
} else {
obj[key] = searchTreeForDates(obj[key])
}
}
}
return obj;
}
function updateDate(content) {
var obj = JSON.parse(content);
obj = searchTreeForDates(obj);
return JSON.stringify(obj);
}
gulp.task('change', function() {
return gulp.src('*.json')
.pipe(change(updateDate))
.pipe(gulp.dest('changed/'))
});
fs
流来读取数据和写入结果,并在中间使用自己的简单转换流。 - joews