gpt4 book ai didi

json - 以灵活的方式标准化 JSON 对象中的数据的最佳实践

转载 作者:太空宇宙 更新时间:2023-11-04 02:00:24 25 4
gpt4 key购买 nike

我需要使用 NodeJS 将各种结构化格式的信息转换为其他格式(例如 html 或文本)。所以我采取了基于 JSON-Schemas 将源格式转换为 JSON 的方法。我还可以根据 Pug 模板将生成的 JSON 转换为文本。

我现在正在寻找一种灵活的方法来标准化数据并简化 JSON 中的结构,以便减少诸如以下方面的变化:日期和时间格式。

此类对象的一个​​示例是:

{
header: {
sender: {
// more properties
id: '12345';
}
receiver: {
// more properties
id: '987654';
}
date: {
date: '170910',
time: '0922'
}
// more properties
}
// more properties
someMore: {
birthdate: {
year: 2016,
month: 5,
day: 11
}
otherProperty: {
// more properties
date: '20170205'
}
}
}

我想将其转换为

{
header: {
senderId: '12345',
receiverId: '987654'
date: '20170910T0922'
}
// more properties
someMore: {
birthdate: '20160511',
otherProperty: {
// more properties
date: '20170205'
}
}
}

这个想法是递归地循环对象中的所有属性,并使用一个 Map,该 Map 具有应该执行操作的每个属性的条目,例如

var map = new Map();
map.set('sender', getSender());
map.set('date', normalizeDate());
map.set('birthdate', normalizeDate());

对于每个属性键,都会检查映射,如果它返回一个函数,则执行该函数,如果没有该属性已创建并且循环继续。

但是,我明显感觉到这个问题以前已经解决了,所以我想知道是否有我可以使用的 npm 包?

最佳答案

经过更多搜索并尝试不同的 JSON 转换器后,我选择了 dot-object因为它提供了一种简单的方法来一次性转换具有多个“规则”的部分结构。

我放弃了编写大量通用标准化函数的想法,只是选择了最明显的函数(性别和日期/时间),并通过将各种结构转换为单个标准化结构来处理它们,然后应用适当的函数。

这可能不是最优雅的方法,但我时间有限,这很有效。

为了将源转换为问题中描述的结果,使用了以下代码:

const dot = require('dot-object');

const rules = {
'header.sender.id': 'header.senderId',
'header.receiver.id': 'header.receiverId'
};

const target = {};

dot.transform(rules, src, target);

// normalizing

target.date = normalizeDate(target.date);
target.someMore.birthdate = normalizeDate(target.someMore.birthdate);
target.someMore.otherProperty.date = normalizeDate(target.someMore.otherProperty.date);

关于json - 以灵活的方式标准化 JSON 对象中的数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46238314/

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