如何在JavaScript中将所有JSON键转换为小写?

3

实际上,我的要求是将整个JSON(仅键)转换为小写。我尝试过它只转换了该JSON的第一个键,并且没有转换所有键。请查看fiddle链接或提供其他方法来完成此操作。

谢谢...

var obj = {
  "Collections": {
    "conTainer": {
      "rowSet": [{
        "containerIsArchived": "Null",
        "containerOrderNo": "26",
        "versionNum": "0",
        "containerGlobalUniqueId": "Null",
        "containerIsTenantBased": "true",
        "containerCreatedBy": "user",
        "containerIsDeleted": "false",
        "containerTenantId": "292FEC76-5F1C-486F-85A5-09D88096F098",
        "containerLayoutId": "4e13dfcd-cd3b-4a29-81bd-0f73cf9577cf",
        "containerApplicationId": "0000000-0000-0000-0000-000000000000",
        "containerIsActive": "Null",
        "containerHeaderText": "apitest19feb16",
        "containerId": "3745b273-c48d-4c94-b576-3d7aac2f7ac6",
        "containerCreatedUTCDate": "2016-02-19 17:57:51.0"
      }]
    }
  }
};

convertKeysToCamelCase(obj);

function convertKeysToCamelCase(obj) {
  if (!obj || typeof obj !== "object") return null;

  if (obj instanceof Array) {
    return $.map(obj, function(value) {
      return convertKeysToCamelCase(value);
    });
  }

  var newObj = {};
  $.each(obj, function(key, value) {
    key = key.charAt(0).toLowerCase() + key.slice(1);
    newObj[key] = value;
  });
  console.log(newObj);
  return newObj;
};

这里是Fiddle链接:fiddle

请在您的问题中添加相关代码,而不仅仅是一个fiddle链接。 - Luca
你是否收到一条错误信息,告诉你应该将代码放在问题中,而不仅仅是链接到JS Fiddle?你需要将代码放在问题中,而不仅仅说一个指向JS Fiddle的链接就是代码。 - Quentin
点击这里查看:https://dev59.com/NmUq5IYBdhLWcg3wNtuB#14697508 - Dipali Vasani
@DipaliVasani ..在我的情况下,JSON与之不同。它在数组内部有一个对象。 - bagya
点击这里查看:http://jsfiddle.net/dipali_vasani/bHz7x/67/ - Dipali Vasani
5个回答

8

尝试下面的代码:

function ConvertKeysToLowerCase(obj) {
    var output = {};
    for (i in obj) {
        if (Object.prototype.toString.apply(obj[i]) === '[object Object]') {
           output[i.toLowerCase()] = ConvertKeysToLowerCase(obj[i]);
        }else if(Object.prototype.toString.apply(obj[i]) === '[object Array]'){
            output[i.toLowerCase()]=[];
             output[i.toLowerCase()].push(ConvertKeysToLowerCase(obj[i][0]));
        } else {
            output[i.toLowerCase()] = obj[i];
        }
    }
    return output;
};

JsFiddle


只需将 toUpperCase 更改为 toLowerCase,以回答问题,并将函数 ConvertKeysToLowerCase 的名称更改为真实。 - Mario Chueca
是的,我已经修改了。非常感谢你。 - bagya
2
@MarioChueca - 实际上,我们的编码中存在一个小问题。它将所有内容转换为对象。我需要一个真正的JSON格式,其中键是小写的。问题在于rowset是一个数组,但它被转换成了对象而不是对象数组。 - bagya
来自2022年的时间旅行者的警告:这只处理数组中的第一个项目,所以不要盲目地复制粘贴这个函数。 - Jason

3

您可以参考@Christophe的答案

如果您无法理解,请查看以下代码:链接

JavaScript:

var obj = {
  "Collections": {
    "conTainer": {
      "rowSet": [{
        "containerIsArchived": "Null",
        "containerOrderNo": "26",
        "versionNum": "0",
        "containerGlobalUniqueId": "Null",
        "containerIsTenantBased": "true",
        "containerCreatedBy": "user",
        "containerIsDeleted": "false",
        "containerTenantId": "292FEC76-5F1C-486F-85A5-09D88096F098",
        "containerLayoutId": "4e13dfcd-cd3b-4a29-81bd-0f73cf9577cf",
        "containerApplicationId": "0000000-0000-0000-0000-000000000000",
        "containerIsActive": "Null",
        "containerHeaderText": "apitest19feb16",
        "containerId": "3745b273-c48d-4c94-b576-3d7aac2f7ac6",
        "containerCreatedUTCDate": "2016-02-19 17:57:51.0"
      }]
    }
  }
};
var json = JSON.stringify(obj);
var newJson = json.replace(/"([\w]+)":/g, function($0, $1) {
  return ('"' + $1.toLowerCase() + '":');
});
var newObj = JSON.parse(newJson);
console.debug(newObj);

2

这里有一个想法,希望能对您有所帮助。

var obj = {
    "containerIsArchived": "Null",
    "containerOrderNo": "26",
    "versionNum": "0",
    "containerGlobalUniqueId": "Null",
    "containerIsTenantBased": "true",
    "containerCreatedBy": "user",
    "containerIsDeleted": "false",
    "containerTenantId": "292FEC76-5F1C-486F-85A5-09D88096F098",
    "containerLayoutId": "4e13dfcd-cd3b-4a29-81bd-0f73cf9577cf",
    "containerApplicationId": "0000000-0000-0000-0000-000000000000",
    "containerIsActive": "Null",
    "containerHeaderText": "apitest19feb16",
    "containerId": "3745b273-c48d-4c94-b576-3d7aac2f7ac6",
    "containerCreatedUTCDate": "2016-02-19 17:57:51.0"
  };  

for(var i in obj){
    obj[i.toLowerCase()] = obj[i]; 
    delete obj[i];
}

console.log(obj);

最后一条语句打印了所有键名都为小写字母的对象。想法是创建一个新的键名--任何给定键名的小写版本--,然后去掉旧的键名


1

将下面的答案稍微修改一下,使其更易于阅读

function convertKeysToCamelCase(obj) {
    var output = {}
    for (var i in obj) {
        var current = obj[i]
        if (isObject(current) || isArray(current)) {
            output[i.toLowerCase()] = convertKeysToCamelCase(current);
        } else {
            output[i.toLowerCase()] = current;
        }
    }
    return output;
};

function isObject(obj) {
    return typeof obj === 'object'
}

function isArray(arr) {
    return Array.isArray(arr)
}

console.log(JSON.stringify(convertKeysToCamelCase(input)));

0
你需要递归进入对象,以便覆盖较低级别的键。为了做到这一点,最好先创建对象的副本,然后再进行修改,就像这样。
// create copy of object
var newObj = JSON.parse(JSON.stringify(obj));
convertKeysToCamelCase(newObj);

function convertKeysToCamelCase(obj) {
    if (!obj || typeof obj !== "object") return null;

    if (obj instanceof Array) {
        return $.map(obj, function(value) {
            return convertKeysToCamelCase(value);
        });
    }

    // manipulates the object being passed in
    $.each(obj, function(key, value) {
        // delete existing key
        delete obj[key];
        key = key.charAt(0).toLowerCase() + key.slice(1);
        obj[key] = value;
        convertKeysToCamelCase(value);
    });

    return obj;
};

代码片段 - http://jsfiddle.net/sbbnmz0b/


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接