如何动态替换JSON对象的键中的空格?例如,如果我有以下对象:
[{
"FIRST NAME": "Philip",
"LAST NAME": "Rivers",
"NUMBER": "17",
"GPA": "1.0",
"OLD_FACTOR": "8",
"NICENESS": "1"
}, {
"FIRST NAME": "Peyton",
"LAST NAME": "Manning",
"NUMBER": "18",
"GPA": "4.0",
"OLD_FACTOR": "5000",
"NICENESS": "5000"
}]
我希望能够分别动态地将“FIRST NAME”和“LAST NAME”重命名为“FIRST_NAME”和“LAST_NAME”。根据目前为止的研究,我有这个功能:
function replaceSpaces(data) {
debugger;
for (var i = 0; i < data.length; i++) {
var obj = data[i];
for (var key in obj) {
var replacedKey = key.split(' ').join('_');
data[i][obj] = replacedKey;
}
}
return data;
}
传入的“data”参数是在进入此函数之前已在其上运行JSON.parse的对象。
我对这段代码的问题是,它正好循环键,并将正确替换的字符串分配给“replacementKey”,但它没有将其分配给原始数据对象。
答案 0 :(得分:4)
你需要:
data[i][obj]
会将obj
转换为字符串,并尝试将其用作属性名称。)这样:
for (var original_property in obj) {
var new_property = original_property.split(' ').join('_');
obj[new_property] = obj[original_property];
delete obj[original_property]
}
答案 1 :(得分:3)
以下是使用forEach
的完整代码。
这些步骤与Quentin
中列出的answer相同
var arr = [{
"FIRST NAME": "Philip",
"LAST NAME": "Rivers",
"NUMBER": "17",
"GPA": "1.0",
"OLD_FACTOR": "8",
"NICENESS": "1"
}, {
"FIRST NAME": "Peyton",
"LAST NAME": "Manning",
"NUMBER": "18",
"GPA": "4.0",
"OLD_FACTOR": "5000",
"NICENESS": "5000"
}];
// Iterate over array
arr.forEach(function(e, i) {
// Iterate over the keys of object
Object.keys(e).forEach(function(key) {
// Copy the value
var val = e[key],
newKey = key.replace(/\s+/g, '_');
// Remove key-value from object
delete arr[i][key];
// Add value with new key
arr[i][newKey] = val;
});
});
console.log(arr);
document.getElementById('result').innerHTML = JSON.stringify(arr, 0, 4);
&#13;
<pre id="result"></pre>
&#13;
严格来说,如果JSON是从服务器以字符串形式获取的话
用键替换_
的空格。
JSON.parse(jsonString.replace(/"([\w\s]+)":/g, function (m) {
return m.replace(/\s+/g, '_');
}));
答案 2 :(得分:0)
由于它是JSON
,因此可以在Regex
的帮助下以字符串形式出现。
var processedJson = yourJson.replace(/( +)(?=[(\w* *]*":)/g, "_");
var yourObj = JSON.parse(processedJson);
/( +)(?=[(\w* *]*":)/g
会在中找到
" ... ":
的所有信息,这是每个JSON对象的关键字。