gpt4 book ai didi

javascript - xml2js 不返回解析的 JSON

转载 作者:行者123 更新时间:2023-12-01 01:06:08 24 4
gpt4 key购买 nike

我在这里缺少什么?即使 console.log 正常工作,parseXML 方法也不会返回 JSON。相反,它返回未定义。

function parseXML(){

var parseString = require('xml2js').parseString;

var str= '<Customers>\
<Customer>\
<first>JIM</first>\
<last>BEAM</last>\
<address>22. JIM. RD.</address>\
<age>24</age>\
<age2>2.0</age2>\
<Phone>206-555-0144</Phone>\
</Customer>\
</Customers>'

parseString(str, function (err, result) {
console.log(JSON.stringify(result)); //<<<<<<<RETURNS THE JSON I EXPECTED
return JSON.stringify(result);
});
}

app.get('/*', (request, response) => {
var json=parseXML();
console.log(json) //<<<<<<RETURNS UNDEFINED
var obj=JSON.parse(json);
console.log(obj);
var jsonres= obj.Customers.Customer[0]["first"];

response.send(['Hello from Express!',jsonres])
})

最佳答案

你可以通过 Promise 和 async/await 来完成这项工作:

function parseXML() {

var parseString = require('xml2js').parseString;

var str = '<Customers>\
<Customer>\
<first>JIM</first>\
<last>BEAM</last>\
<address>22. JIM. RD.</address>\
<age>24</age>\
<age2>2.0</age2>\
<Phone>206-555-0144</Phone>\
</Customer>\
</Customers>'
return new Promise((resolve, reject) => {
parseString(str, function (err, result) {
console.log(JSON.stringify(result)); //<<<<<<<RETURNS THE JSON I EXPECTED
resolve(JSON.stringify(result))
});
})
}

app.get('/*', async (request, response) => {
var json = await parseXML();
console.log(json) //<<<<<<RETURNS UNDEFINED
var obj = JSON.parse(json);
console.log(obj);
var jsonres = obj.Customers.Customer[0]["first"];

response.send(['Hello from Express!', jsonres])
})

编辑:抱歉,我想我应该在这里添加一些解释。

parseString 函数有一个异步回调,该回调在函数完成处理之前不会触发,因此您的代码无法正常工作的原因是您试图在数据处理完成之前访问数据。以下是正在发生的步骤:

  1. 调用parseXML函数
  2. 调用 parseString 函数(这将启动异步处理)
  3. 尝试记录存储在 json 变量中的数据,该变量应该保存 parseXML 调用的结果。这是未定义的,因为 parseXML 函数没有返回任何内容,因此未定义会记录到控制台。 parseString 回调中的返回值返回回调函数中的值,而不是原始函数。此外,在您尝试访问 json 变量中的数据之前,它甚至不会被调用
  4. 传递给 parseString 函数的回调函数完成,您会看到您期望记录到控制台的 json。

我的更改基本上将您的 parseString 包装在一个 promise 中,该 promise 在回调完成时解析,并从 parseXML 函数返回该 promise 。这允许您使用 async/await 来获取异步处理的结果。您也可以编写 parseXML().then(data => {//process data here }

关于javascript - xml2js 不返回解析的 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55619548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com