使用 Javascript 从 API 响应中剥离 @

Strip @ from API response with Javascript

本文关键字:剥离 响应 API Javascript 使用      更新时间:2023-09-26

我正在使用一个提供如下响应的 api:

    {
    "statuses": {
        "status": [
            {
                "@array": "true",
                "@id": "1",
                "@uri": "https://api.com/people/statuses/1",
                "name": "Member",
            ...
        ]
    }
}

我需要使用 javascript 将 @ 从键名中删除。 例如"@id"到"id"。 我该怎么做?

您必须手动迭代和重命名每个键,并删除给定状态的原始属性。类似的东西

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];
  }
});

除了像其他人所说的那样循环使用键并构建一个新对象之外,您可能会变得非常疯狂并执行以下操作:

// 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); 

虽然,如果您的任何数据自然@其中,它就会被正则表达式淘汰。我知道,这太疯狂了。认为可能值得一提。

你不能只重命名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...
}

这将为您提供所需的内容,尽管所有带有"@"的属性仍然存在。 不过,您可以更进一步并删除这些属性。

delete status["@array"];
delete status["@id"];
delete status["@uri"];

我希望这就是你要找的。 让我知道这是否有帮助!

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);

这将递归地爬取和反对,并删除任何键开头的"@"。

首先,数组可能是任何JavaScript解析器的保留字,但忽略了尝试这个...

statuses.status[0].array = statuses.status[0]["@array"];
delete statuses.status[0]["@array"];

你需要这样做的原因是 JavaScript 不支持重命名键。