如何从SOAP API响应中解析tranResult的temp字段值?
解决SOAP API响应中提取
temp字段的问题 嘿,你可别再用util.inspect()把结构化的API响应转成字符串啦!那玩意儿只是用来在控制台打印调试的,把对象转成纯文本后,反而没法轻松提取嵌套字段了——咱们直接操作原始的result对象就行!
正确的提取步骤
根据你给出的SOAP响应结构,咱们可以直接通过嵌套属性访问来拿到temp的值:
// 直接用原始的result对象,不要转成字符串! const tempValue = result['S:Envelope']['S:Body']['n:sendresponse'].tranResult.temp; console.log(tempValue); // 输出:'224'
避免报错的安全写法
如果担心API响应的某个层级可能不存在(比如字段缺失),可以用ES6的可选链操作符?.来防止代码报错:
// 可选链写法,某个层级不存在时会返回undefined,不会抛出错误 const tempValue = result?.['S:Envelope']?.['S:Body']?.['n:sendresponse']?.tranResult?.temp;
为什么不能用util.inspect()的结果?
你执行var resl=util.inspect(result, false, null);后,resl是一个字符串,不是原来的JavaScript对象。如果非要从这个字符串里提取temp,只能用正则匹配:
// 不推荐!这种方法非常脆弱,API格式稍有变化就会失效 const tempMatch = resl.match(/temp: '(\d+)'/); const tempValue = tempMatch ? tempMatch[1] : undefined;
这种方法完全没必要,而且容易出问题,所以强烈建议直接操作原始的result对象。
内容的提问来源于stack exchange,提问作者J. Davidson
相关产品推荐
相关产品推荐

