gpt4 book ai didi

javascript - 以编程方式替换 JSON 对象

转载 作者:行者123 更新时间:2023-11-29 15:34:54 25 4
gpt4 key购买 nike

我正在寻找替换文件中 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 对象中的所有 createdAtupdatedAt 字段(可以是许多)与:

   "createdAt":"2015-05-12T21:14:51Z"

   "updatedAt":"2015-05-12T21:14:51Z"

每个文件中有无数(其中 100 个)对象,字段值不同。我需要检查并用新格式替换每个 createdAtupdatedAt 对象。日期无关紧要。我可以让他们成为任何人。

我可以手动完成这项工作,但它确实需要我一两天的时间来完成全职工作(我知道,我尝试做一个文件,但在 1/2 小时后我放弃了,它正在逐渐消失太长)。

我如何以编程方式执行此操作?

正则表达式?赛德?还有别的吗?

最后说明:我只需要这样做一次。在那之后,我不需要再这样做了。

感谢任何提示!

示例 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/'))
});

最佳答案

这是一个初步的尝试。您实现自己的“日期解析逻辑”。它需要你安装 gulp。并将其保存在 gulpfile.js 中。您可能需要遍历所有“日期”对象的属性。但这个逻辑并不难。

var gulp = require('gulp');
var change = require('change');

function translateDate(dateField){
return dateField.A + dateField.b + ...;

}
function updateDate(content) {
var obj = JSON.parse(content);
//loop over the obj properties and call the below
// for the ones you want to change.
obj.dateField = translateDate(obj.dateField);
return JSON.stringify(obj);
}

gulp.task('change', function() {
return gulp.src('**/*.json')
.pipe(change(updateDate))
.pipe(gulp.dest('changed/'))
});

关于javascript - 以编程方式替换 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30384284/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com