我正在使用api提供这样的响应:
{
"statuses": {
"status": [
{
"@array": "true",
"@id": "1",
"@uri": "https://api.com/people/statuses/1",
"name": "Member",
...
]
}
}
我需要使用javascript来删除密钥名称中的@。例如" @ id"到" id"。我怎么能这样做?
答案 0 :(得分:1)
您必须手动迭代并重命名每个键并删除给定状态下的原始属性。像
这样的东西response.statuses.status.forEach(function(status) {
var keys = Object.keys(status),
keyCount = keys.length;
for (var j = 0; j < keyCount; j++) {
var thisKey = keys[j];
status[thisKey.replace('@', '')] = status[thisKey];
delete status[thisKey];
}
});
答案 1 :(得分:1)
除了像其他人所说的那样循环键并构建一个新对象之外,你可能会变得非常疯狂并做这样的事情:
// convert to string, if not already a string response
var responseStr = JSON.stringify(myObj);
// REGEX AWAY THE STUFF
responseStr = reponseStr.replace(/@/g, "");
// convert to obj
myObj = JSON.parse(responseStr);
虽然,如果您的任何数据中自然有@
,那么它就会得到正则表达式。我知道,这太疯狂了。认为值得一提。
答案 2 :(得分:0)
function stripSymbol(obj) {
var type = Object.prototype.toString.call(obj);
if (type === '[object Array]') {
for (var i = 0, len = obj.length; i < len; i++) {
stripSymbol(obj[i]);
}
} else if (type == '[object Object]') {
Object.keys(obj).forEach(function(key) {
if (key[0] === '@') {
var newKey = key.substr(1);
obj[newKey] = obj[key];
delete key;
key = newKey;
}
stripSymbol(obj[key]);
});
}
}
stripSymbol(data);
这将以递归方式爬行并对象并删除任何键开头的“@”。
答案 3 :(得分:0)
您无法在javascript对象中重命名密钥,但您始终可以扩展响应对象。像这样的东西会起作用:
for(var i = 0; i < statuses.status.length; i++){
var status = statuses.status[i];
status.array = status["@array"];
status.id = status["@id"];
status.uri = status["@uri];
// could also delete properties here... see below...
}
这会给你你想要的东西,虽然所有的属性与&#39; @&#39;仍然存在。您可以更进一步,删除这些属性。
delete status["@array"];
delete status["@id"];
delete status["@uri"];
我希望你能找到的是什么。如果有帮助,请告诉我!
答案 4 :(得分:-2)
首先,数组可能是任何javascript解析器的保留字,但忽略了尝试这个......
statuses.status[0].array = statuses.status[0]["@array"];
delete statuses.status[0]["@array"];
您需要执行此操作的原因是因为javascript不支持重命名密钥。