0

在某些情况下,我需要转换我的 XML 响应,并且在多种情况下,我的节点会出现一次或多次。如果看起来这个bbb将只是另一个元素:

<aaa>
 <bbb>ccc</bbb>
</aaa>

要获得ccc值,我必须像这样访问 json:pm.response.json().aaa.bbb

但是如果 XML 看起来像这样bbb将变成数组:

<aaa>
 <bbb>ccc</bbb>
 <bbb>ddd</bbb>
</aaa>

要获得ccc值,我必须像这样访问 json:pm.response.json().aaa.bbb[0]

稍后,当我使用 JSON 数据时,我需要始终检查是否有一个或多个从提供程序返回的元素。我想要的是避免Array.isArray...一直检查并强制它成为数组。有这样的选择吗?

4

1 回答 1

0

我已经创建了这组功能,希望它们可以帮助您(我认为这transformIntoSingleElement就是您要寻找的):

function stackTrace() {
    var err = new Error();
    console.log(err.stack);
    return err;
}
function transformIntoArray(element, mandatory){
    mandatory = (mandatory!==undefined)?mandatory:true;
    if(element === undefined && mandatory){
        stackTrace();
        return element;
    }
    if(element === undefined)
        return [];
    if(element.constructor.name != "Array")
        return [element];
    return element;
}
function transformIntoSingleElement(element, index, mandatory){
    mandatory = (mandatory!==undefined)?mandatory:true;
    if(element === undefined && mandatory){
        stackTrace();
        return element;
    }
    if(element === undefined){
        return element;
    }
    if(element.constructor.name == "Array"){
        if(element.length >= index)
            return element[index];
        return element[0];
    }
    return element;
}
function getElementValue(element, dflt, mandatory){
    dflt = dflt || "";
    mandatory = (mandatory!==undefined)?mandatory:true;
    if(element === undefined && mandatory){
        stackTrace();
        return element;
    }
    if(element === undefined)
        return dflt;
    if(element._ === undefined)
        return element;
    return element._;
}
function getAttributeValue(element, attribute, dflt, mandatory){
    dflt = dflt || "";
    mandatory = (mandatory!==undefined)?mandatory:true;
    if(element === undefined && mandatory){
        stackTrace();
        return element;
    }
    if(element.$ !== undefined && element.$[attribute] !== undefined && (element.$[attribute] !== "" || (element.$[attribute] === "" && mandatory))){
        return element.$[attribute];
    }
    return dflt;
}
于 2018-06-27T15:54:45.333 回答