Есть ли в Postman способ изменить правила преобразования xml2Json?
У меня есть несколько случаев, когда мне нужно преобразовать свой 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...
все время и заставить его быть массивом. Есть ли такой вариант?
1 ответ
Я создал эту группу функций, надеюсь, они могут помочь вам (я думаю, что 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;
}