一种以不区分大小写的方式反序列化JSON的好方法



我只是想做世界上最琐碎的事情,但在分析来自各种遗留设备的大小写不一致的数据时遇到了问题。

我正在尝试在TypeScript 中解析以下JSON

{
"property": 5
}

与。

{
"Property": 5
}

我能想到的最好的答案是简单地循环遍历对象的键并在它们上运行"toUpper",但是否有一个不错的NPM包(比如json typescript mapper,但不区分大小写(,它可以让我反序列化对象,而不必循环遍历对象键并手动提取值或编写大量样板代码

我想将JSON解析为一个统一的对象模式,比如{property},这样我就可以访问它,而不需要检查名称的变化

一个选项是编写自定义reviver函数,作为JSON.parse的第二个参数,将普通对象的键转换为小写:

const json = `{"Property": 5,"inner":{"Foo":"foo"}}`;
const obj = JSON.parse(
json,
(_, val) => {
if (Array.isArray(val) || typeof val !== 'object') {
return val;
}
return Object.entries(val).reduce((a, [key, val]) => {
a[key.toLowerCase()] = val;
return a;
}, {});
}
);
console.log(obj);

最新更新