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

时间:2018-12-04 20:57:25

标签: javascript typescript

我只是想做世界上最琐碎的事情,并且遇到解析来自各种旧设备的不一致大小写数据的问题。

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

{
    "property": 5
}

vs。

{
   "Property": 5
}

我能想到的最好的答案是从字面上遍历对象的键并在它们上运行“ toUpper”,但是那里有一个不错的NPM包(例如json-typescript-mapper但不是区分大小写),这使我可以反序列化对象,而不必循环遍历对象键并手动提取值或编写大量样板代码

我想将JSON解析为一个统一的对象模式,例如{property},这样我就可以访问它而无需花费很多条件来检查名称的变化

1 个答案:

答案 0 :(得分:1)

一种选择是编写自定义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);