Am a novice in programming.
Have created a flow in Pipedream, where i converted an xml object to json.
Need to get all values 'name' with format 123456-123-1234 as from a certain level (see picture). The issue is that some levels contain the item straight away, some have multiple items, and therefore another nested array.
The full json array =
[{"_attributes":{"category":"type","description":"Chassi","factoryDiscount":"none","instance":"0","isCostEdited":"false","isLeaf":"false","isNonStandard":"false","isResolved":"false","isSpecialOption":"false","level":"2.00","listPrice":"24736.00","name":"chassi","netPrice":"11625.92","qty":"1.00","salesPrice":"12615.36"},"items":{"item":{"_attributes":{"category":"type","category2":"type","description":"L06 AC : 0,6t","factoryDiscount":"chassi","instance":"0","isCostEdited":"false","isLeaf":"true","isNonStandard":"false","isResolved":"false","isSpecialOption":"false","level":"3.00","listPrice":"24736.00","name":"117101-1100-005","netPrice":"11625.92","qty":"1.00","salesPrice":"12615.36"}}}},{"_attributes":{"category":"type","description":"Ancillaries","factoryDiscount":"none","instance":"0","isCostEdited":"false","isLeaf":"false","isNonStandard":"false","isResolved":"false","isSpecialOption":"false","level":"2.00","listPrice":"152.00","name":"ancilleries","netPrice":"71.44","qty":"1.00","salesPrice":"77.52"},"items":{"item":[{"_attributes":{"category":"wheels","category2":"wheels","description":"DW polyurethane with tread","factoryDiscount":"ancillary","instance":"0","isCostEdited":"false","isLeaf":"true","isNonStandard":"false","isResolved":"false","isSpecialOption":"false","level":"3.00","listPrice":"152.00","name":"115202-1640-015","netPrice":"71.44","qty":"1.00","salesPrice":"77.52"}},{"_attributes":{"category":"wheels","category2":"wheels","description":"LW Single polyurethane","factoryDiscount":"ancillary","instance":"0","isCostEdited":"false","isLeaf":"true","isNonStandard":"false","isResolved":"false","isSpecialOption":"false","level":"3.00","listPrice":"0.00","name":"115202-1650-005","netPrice":"0.00","qty":"1.00","salesPrice":"0.00"}},{"_attributes":{"category":"mast_options","category2":"mast_options","description":"Central lever LLC","factoryDiscount":"ancillary","instance":"0","isCostEdited":"false","isLeaf":"true","isNonStandard":"false","isResolved":"false","isSpecialOption":"false","level":"3.00","listPrice":"0.00","name":"112000-5100-005","netPrice":"0.00","qty":"1.00","salesPrice":"0.00"}},{"_attributes":{"category":"safety","category2":"safety","description":"Technical Documentation NL","factoryDiscount":"ancillary","instance":"0","isCostEdited":"false","isLeaf":"true","isNonStandard":"false","isResolved":"false","isSpecialOption":"false","level":"3.00","listPrice":"0.00","name":"117101-7850-040","netPrice":"0.00","qty":"1.00","salesPrice":"0.00"}},{"_attributes":{"category":"safety","category2":"safety","description":"RAL 2002 Vermillion","factoryDiscount":"ancillary","instance":"0","isCostEdited":"false","isLeaf":"true","isNonStandard":"false","isResolved":"false","isSpecialOption":"false","level":"3.00","listPrice":"0.00","name":"117101-7900-005","netPrice":"0.00","qty":"1.00","salesPrice":"0.00"}}]}},{"_attributes":{"category":"type","category2":"type","description":"Battery & Charger","factoryDiscount":"none","instance":"0","isCostEdited":"false","isLeaf":"true","isNonStandard":"false","isResolved":"false","isSpecialOption":"false","level":"2.00","listPrice":"0.00","name":"battery_charger","netPrice":"0.00","qty":"1.00","salesPrice":"0.00"}},{"_attributes":{"category":"taxes","description":"Taxes","factoryDiscount":"none","instance":"0","isCostEdited":"false","isLeaf":"false","isNonStandard":"false","isResolved":"false","isSpecialOption":"false","level":"2.00","listPrice":"0.00","name":"taxes","netPrice":"0.00","qty":"1.00","salesPrice":"0.00"},"items":{"item":[{"_attributes":{"category":"taxes","category2":"taxes","description":"Valorlub","factoryDiscount":"none","instance":"0","isCostEdited":"false","isLeaf":"true","isNonStandard":"false","isResolved":"false","isSpecialOption":"false","level":"3.00","listPrice":"0.00","name":"valorlub","netPrice":"0.00","qty":"1.00","salesPrice":"0.00"}},{"_attributes":{"category":"taxes","category2":"taxes","description":"Recytyre cat 1A","factoryDiscount":"none","instance":"0","isCostEdited":"false","isLeaf":"true","isNonStandard":"false","isResolved":"false","isSpecialOption":"false","level":"3.00","listPrice":"0.00","name":"recytyre_cat_1A","netPrice":"0.00","qty":"4.00","salesPrice":"0.00"}}]}}]
My Code in a NodJs Step in pipedream:
export default defineComponent({
async run({ steps, $ }) {
// let recordb = (steps.xml_to_json.$return_value.resource.attributes.attribute[4].items.item.items.item[1].items.item.length)
for (let i = 0; i < steps.xml_to_json.$return_value.resource.attributes.attribute[4].items.item.items.item.length; i++) {
let record = (steps.xml_to_json.$return_value.resource.attributes.attribute[4].items.item.items.item[i].items.item)
if (record !== undefined){
console.log(record);
}//if1
let lth = steps.xml_to_json.$return_value.resource.attributes.attribute[4].items.item.items.item[i].items.item.length;
if (lth !== undefined){
//console.log(steps.xml_to_json.$return_value.resource.attributes.attribute[4].items.item.items.item[i].items.item.length);
for (let j = 0; j < steps.xml_to_json.$return_value.resource.attributes.attribute[4].items.item.items.item[i].items.item.length; i++) {
let recordb = (steps.xml_to_json.$return_value.resource.attributes.attribute[4].items.item.items.item[i].items.item[j])
if (recordb !== undefined){
console.log(recordb);
}//if2
}//for2
}
}//for1
//console.log(recordb);
},
})
The output:
{ _attributes: { category: 'type', category2: 'type', description: 'L06 AC : 0,6t', factoryDiscount: 'chassi', instance: '0', isCostEdited: 'false', isLeaf: 'true', isNonStandard: 'false', isResolved: 'false', isSpecialOption: 'false', level: '3.00', listPrice: '24736.00', name: '117101-1100-005', netPrice: '11625.92', qty: '1.00', salesPrice: '12615.36' } }
27-12-2022 14:37:39 [ { _attributes: { category: 'wheels', category2: 'wheels', description: 'DW polyurethane with tread', factoryDiscount: 'ancillary', instance: '0', isCostEdited: 'false', isLeaf: 'true', isNonStandard: 'false', isResolved: 'false', isSpecialOption: 'false', level: '3.00', listPrice: '152.00', name: '115202-1640-015', netPrice: '71.44', qty: '1.00', salesPrice: '77.52' } }, { _attributes: { category: 'wheels', category2: 'wheels', description: 'LW Single polyurethane', factoryDiscount: 'ancillary', instance: '0', isCostEdited: 'false', isLeaf: 'true', isNonStandard: 'false', isResolved: 'false', isSpecialOption: 'false', level: '3.00', listPrice: '0.00', name: '115202-1650-005', netPrice: '0.00', qty: '1.00', salesPrice: '0.00' } }, { _attributes: { category: 'mast_options', category2: 'mast_options', description: 'Central lever LLC', factoryDiscount: 'ancillary', instance: '0', isCostEdited: 'false', isLeaf: 'true', isNonStandard: 'false', isResolved: 'false', isSpecialOption: 'false', level: '3.00', listPrice: '0.00', name: '112000-5100-005', netPrice: '0.00', qty: '1.00', salesPrice: '0.00' } }, { _attributes: { category: 'safety', category2: 'safety', description: 'Technical Documentation NL', factoryDiscount: 'ancillary', instance: '0', isCostEdited: 'false', isLeaf: 'true', isNonStandard: 'false', isResolved: 'false', isSpecialOption: 'false', level: '3.00', listPrice: '0.00', name: '117101-7850-040', netPrice: '0.00', qty: '1.00', salesPrice: '0.00' } }, { _attributes: { category: 'safety', category2: 'safety', description: 'RAL 2002 Vermillion', factoryDiscount: 'ancillary', instance: '0', isCostEdited: 'false', isLeaf: 'true', isNonStandard: 'false', isResolved: 'false', isSpecialOption: 'false', level: '3.00', listPrice: '0.00', name: '117101-7900-005', netPrice: '0.00', qty: '1.00', salesPrice: '0.00' } } ]
27-12-2022 14:37:39 { _attributes: { category: 'wheels', category2: 'wheels', description: 'DW polyurethane with tread', factoryDiscount: 'ancillary', instance: '0', isCostEdited: 'false', isLeaf: 'true', isNonStandard: 'false', isResolved: 'false', isSpecialOption: 'false', level: '3.00', listPrice: '152.00', name: '115202-1640-015', netPrice: '71.44', qty: '1.00', salesPrice: '77.52' } }
And get this error: (below)
TypeError Cannot read property 'item' of undefined
DETAILS at Object.run (file:///tmp/pdg/dist/code/6e17abcbd3b93bd1a5ed7f5b46dabc6403308251df14c794b64e5f9a74ec9378/component.mjs:17:117) at global.executeComponent (/var/task/launch_worker.js:139:53) at MessagePort.messageHandler (/var/task/launch_worker.js:598:28)
Does something like this work?
Basically, check if the item is an Array or not and either loop over it if it is or else grab the name property.
output:
See full snippet below:
Or if you potentially want to ignore the last 2 names then you can only append those that match a regex pattern
output:
See full snippet below: