我有一个 JSON 对象。我想转换数组以生成以下 PascalCase:
contacts: [{ givenName: "Matt", familyName: "Berry" }]
Contacts: [{ GivenName: "Matt", FamilyName: "Berry" }]
以下答案无效
Lodash 有 Pascal 大小写功能吗?它没有在运行时找到它。
_.mapKeys(obj, (v, k) => _.camelCase(k))
目前正在使用 Typescript Angular 10 库 .
将返回的 JSON 对象属性转换为(先降低)camelCase
希望遍历对象数组的所有成员,
PascalCase 看起来和驼峰命名法几乎一样,唯一不同的是PascalCase 首字母大写。所以你应该能够使用 lodash 中的 camelCase 函数,然后用另一个函数将 camelCase 单词的第一个字母大写,例如像这样:
const capitalize = (str) => {
return str.charAt(0).toUpperCase() + str.slice(1)
}
所以整个解决方案大概是这样的:
_.mapKeys(obj, (v, k) => capitalize(_.camelCase(k)))
你可以这样做;
import {camelCase, startCase} from 'lodash';
startCase(camelCase("givenName")).replace(/ /g, ''); // will procude GivenName
检查这个gist所有其他场景。
如果你想转换一个对象的所有属性,你可以使用这个;
const pascalizeKeys = (obj) => {
if (Array.isArray(obj)) {
return obj.map(v => pascalizeKeys(v));
} else if (obj !== null && obj.constructor === Object) {
return Object.keys(obj).reduce(
(result, key) => ({
...result,
[toPascalCase(key)]: pascalizeKeys(obj[key]),
}),
{},
);
}
return obj;
};
const toPascalCase = (str) => startCase(camelCase(str)).replace(/ /g, '')
代码取自这个answer并进一步修改以进行pascalization.
这是一个stackblitz,所以你可以进一步检查。
使用
json-case-convertor
const jcc = require('json-case-convertor')
const pascalCaseJson = jcc.pascalCaseKeys(yourJsonObject)
你也可以在不使用 lodash 的情况下尝试这个。
const contact = {
givenName: "Matt",
familyName: "Berry"
};
// define function that converts an object keys to Pascal using the reduce method
const convertToPascalObjectKey = (obj) => {
return Object.entries(obj).reduce((acc, [key, value]) => {
// covert the 1st leter of each key to uppercase to create pascalcase
const pascalCaseKey = key.charAt(0).toUpperCase() + key.slice(1);
return { ...acc, [pascalCaseKey]: value };
}, {});
};
const pascalCaseObj = convertToPascalObjectKey(contact);
console.log(pascalCaseObj);