javascript 一个以不区分大小写的方式实现JSON的好方法

wlzqhblo  于 5个月前  发布在  Java
关注(0)|答案(2)|浏览(96)

我只是想做世界上最琐碎的事情,并且在解析来自各种遗留设备的不一致的数据时遇到了问题。
我尝试在TypeScript中解析以下JSON

{
    "property": 5
}

字符串
vs.

{
   "Property": 5
}


我能想到的最好的答案就是遍历对象的键,然后对它们运行“toUpper”,但是有没有一个像样的NPM包(比如json-typescript-mapper,但不区分大小写),它可以让我在不必遍历对象键和手动提取值或编写大量样板代码的情况下对对象进行封装
我想将JSON解析为一个统一的对象模式,比如{ property },这样就可以访问它,而无需检查名称的变化

ev7lccsx

ev7lccsx1#

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

字符串

fhg3lkii

fhg3lkii2#

一个更现代的选择是:
请注意,相同但大小写不同的原始键将被合并,最新的条目将被保留。

const toLowerCaseObject = (input) => Object.fromEntries(Object.entries(input).map(([a,b]) => [a.toLocaleLowerCase(), b]));

console.log(JSON.stringify(toLowerCaseObject({A: 11, b: 12, B: 1})));

字符串

相关问题