From b61ac4d9692d23c632311e1e5569c1d2181188be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lu=C3=ADs=20Jesus?= Date: Wed, 26 Mar 2025 15:49:56 +0000 Subject: [PATCH] Refactor: code is easier to understand and more recursive-friendly --- src/pages/tools/json/json-to-xml/service.ts | 48 ++++++++++++++------- 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/src/pages/tools/json/json-to-xml/service.ts b/src/pages/tools/json/json-to-xml/service.ts index 4525583..bbc05c1 100644 --- a/src/pages/tools/json/json-to-xml/service.ts +++ b/src/pages/tools/json/json-to-xml/service.ts @@ -41,31 +41,49 @@ const convertObjectToXml = ( for (const key in obj) { const value = obj[key]; - const keyString = isNaN(Number(key)) ? key : `row-${key}`; - if (Array.isArray(value)) { - value.forEach((item) => { - xml += `${getIndentation(options, depth)}<${keyString}>${newline}`; - xml += convertObjectToXml(item, options, depth + 1); - xml += `${getIndentation(options, depth)}${newline}`; - }); - } else if (value === null) { + // Handle null values + if (value === null) { xml += `${getIndentation( options, depth )}<${keyString}>${newline}`; - } else if (typeof value === 'object') { + continue; + } + + // Handle arrays + if (Array.isArray(value)) { + value.forEach((item) => { + xml += `${getIndentation(options, depth)}<${keyString}>`; + if (item === null) { + xml += `${newline}`; + } else if (typeof item === 'object') { + xml += `${newline}${convertObjectToXml( + item, + options, + depth + 1 + )}${getIndentation(options, depth)}`; + xml += `${newline}`; + } else { + xml += `${escapeXml(String(item))}${newline}`; + } + }); + continue; + } + + // Handle objects + if (typeof value === 'object') { xml += `${getIndentation(options, depth)}<${keyString}>${newline}`; xml += convertObjectToXml(value, options, depth + 1); xml += `${getIndentation(options, depth)}${newline}`; - - // All other types are treated the same way - } else { - xml += `${getIndentation(options, depth)}<${keyString}>${escapeXml( - String(value) - )}${newline}`; + continue; } + + // Handle primitive values (string, number, boolean, etc.) + xml += `${getIndentation(options, depth)}<${keyString}>${escapeXml( + String(value) + )}${newline}`; } return depth === 0 ? `${xml}` : xml;