Javascript:将返回的 JSON 对象属性转换为 PascalCase

问题描述 投票:0回答:4

我有一个 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

希望遍历对象数组的所有成员,

javascript json angular typescript lodash
4个回答
1
投票

PascalCase 看起来和驼峰命名法几乎一样,唯一不同的是PascalCase 首字母大写。所以你应该能够使用 lodash 中的 camelCase 函数,然后用另一个函数将 camelCase 单词的第一个字母大写,例如像这样:

const capitalize = (str) => {
  return str.charAt(0).toUpperCase() + str.slice(1)
}

所以整个解决方案大概是这样的:

_.mapKeys(obj, (v, k) => capitalize(_.camelCase(k)))

1
投票

你可以这样做;

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,所以你可以进一步检查。


0
投票

使用

json-case-convertor

const jcc = require('json-case-convertor')
const pascalCaseJson = jcc.pascalCaseKeys(yourJsonObject)

包链接:https://www.npmjs.com/package/json-case-convertor


0
投票

你也可以在不使用 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);

© www.soinside.com 2019 - 2024. All rights reserved.