我有一个问题要遍历从 API 获得的非常复杂的响应。描述整个情况。
我有一个提供 XML 的 API。我正在使用 xml2js 节点模块将 XML 解析为 JavaScript 对象。直到某个时候它工作正常,但是我不知道如何遍历我从 xml 解析的复杂对象。
这是我的 JavaScript:从 API 获取 XML 数据 > 将 XML 解析为 JS 对象。
let headers = new Headers();
headers.append("Content-Type", "application/xml");
headers.append("Accept", "*/*");
headers.append("Access-Control-Allow-Origin", "http://localhost:8080");
headers.append("Access-Control-Allow-Credentials", "true");
headers.append("GET", "POST", "OPTIONS");
headers.append(
"Authorization",
"Basic [some_hash_here]"
);
const proxyurl = "https://cors-anywhere.herokuapp.com/";
const url =
"https://some-website-api.com/some/request"; // site that doesn’t send Access-Control-*
fetch(proxyurl + url, { headers: headers }) // https://cors-anywhere.herokuapp.com/https://some-website-api.com/some/request
.then(response => response.text())
.then(contents => {
console.log(contents);
var convert = require("xml-js");
var xml = contents;
var options = { ignoreComment: true, alwaysChildren: true, compact: true };
var result = convert.xml2js(xml, options); // converting xml to js objects
console.log(result);
alert(result.application.modules.module[0].moduleItem.dataField[0]._attributes.name);
});
最后的警报工作正常,我可以得到这个特定的值:
但是如何迭代并从其他 moduleItem 对象中获取所有其他值?所以名字也来自:
application.modules.module[1].moduleItem.dataField[1]._attributes.name
application.modules.module[2].moduleItem.dataField[2]._attributes.name
application.modules.module[3].moduleItem.dataField[3]._attributes.name
ETC...
能够使用 Vue.js 数据模型将它们呈现在列表中。
我在下面尝试过,但没有运气。
let returnedName = result.application.modules.module.moduleItem.dataField._attributes.map(x => x.name);
this.nameModules = returnedName
这是我想要迭代的响应结构。