我正在尝试导出一个将xml解析为json对象的函数。
export const parse = (body) => {
const parser = new xml2js.Parser({explicitArray: false, trim: true});
parser.parseString(body, (err, result) => {
if (err) return err;
parser.parseString(result['soapenv:Envelope']['soapenv:Body']['ns1:searchResponse'].searchReturn._, (err, result) => {
if (err) return err;
console.log(result);
return result;
});
});
}
我遇到的问题是函数返回undefined,但是,它管理console.log正确的结果。
答案 0 :(得分:3)
由于您的函数是异步的,因此可以将其转换为promise。
public class MyModel {
.....
@JsonInclude(JsonInclude.Include.NON_NULL)
private String myProperty;
.....
}
你可以这样使用它。
export const parse = (body) => {
return new Promise((resolve, reject) => {
const parser = new xml2js.Parser({explicitArray: false, trim: true});
parser.parseString(body, (err, result) => {
if (err) return reject(err);
parser.parseString(result['soapenv:Envelope']['soapenv:Body']['ns1:searchResponse'].searchReturn._, (err, result) => {
if (err) return reject(err);
resolve(result);
});
});
}
})
答案 1 :(得分:2)
解析器是异步的,因此您需要使用回调或承诺来解释它。
const parser = new xml2js.Parser({explicitArray: false, trim: true});
export const parse = (body) => new Promise((resolve, reject) => {
parser.parseString(body, (err, result) => {
if(err) return reject(err);
return resolve(result);
});
});
使用。
module.parse(xml).then((parsedResult) => {
});