Skip to content

Instantly share code, notes, and snippets.

@amenpunk
Last active September 5, 2024 17:33
Show Gist options
  • Save amenpunk/351d1ffd9ddf5a5f4b05a336a6bd2fe2 to your computer and use it in GitHub Desktop.
Save amenpunk/351d1ffd9ddf5a5f4b05a336a6bd2fe2 to your computer and use it in GitHub Desktop.
function loadJsonAsObjectfromFile() {
var fs = require('fs');
var jsonData = fs.readFileSync('data.json');
// var jsonData = fs.readFileSync('inter.json');
return JSON.parse(jsonData);
}
function writeJsonToFile(jsonData) {
var fs = require('fs');
fs.writeFileSync('out.json', JSON.stringify(jsonData, null, 2));
}
var doc = loadJsonAsObjectfromFile();
// console.log(doc)
/**
* Función recursiva para procesar y transformar los nodos "Categoria".
* @param {Object} categoria - Objeto Categoria del JSON
*/
/**
* Función recursiva para procesar y transformar los nodos "Categoria" y cambiar los nombres de los atributos.
* @param {Object} categoria - Objeto Categoria del JSON.
*/
function processCategoria(categoria) {
// Cambiar "@Nombre" a "DocumentSubject"
if (categoria["@Nombre"]) {
categoria["DocumentSubject"] = categoria["@Nombre"];
delete categoria["@Nombre"];
}
// Cambiar "Tipo_documento" a "DocumentServiceType"
if (categoria["Tipo_documento"]) {
categoria["DocumentServiceType"] = categoria["Tipo_documento"];
delete categoria["Tipo_documento"];
// console.log('CATEGO - ', categoria["DocumentServiceType"])
let cate = categoria["DocumentServiceType"]
if (Array.isArray(cate)) {
// Procesar cada tipo de documento para modificar "@nombre" a "DocumentSubject"
categoria["DocumentServiceType"].forEach((tipo) => {
if (tipo["@nombre"]) {
tipo["DocumentSubject"] = tipo["@nombre"];
delete tipo["@nombre"];
}
});
} else {
categoria["DocumentServiceType"] = [{ "DocumentSubject": cate["@nombre"] }];
}
}
// Cambiar "Categoria" a "DocumentService" y procesarlas recursivamente
if (categoria["Categoria"]) {
categoria["DocumentService"] = categoria["Categoria"];
delete categoria["Categoria"];
let cate = categoria["DocumentService"]
if (Array.isArray(cate)) {
categoria["DocumentService"].forEach((subCategoria) => {
processCategoria(subCategoria);
});
} else {
categoria["DocumentService"] = [cate];
categoria["DocumentService"].forEach((subCategoria) => {
processCategoria(subCategoria);
});
}
}
}
function OnlyTipos(categorias) {
if (categorias['Tipo_documento']) {
let tipo = categorias['Tipo_documento']
if (Array.isArray(tipo)) {
// Procesar cada tipo de documento para modificar "@nombre" a "DocumentSubject"
tipo.forEach((tipo) => {
if (tipo["@nombre"]) {
tipo["DocumentSubject"] = tipo["@nombre"];
delete tipo["@nombre"];
}
});
} else {
categorias["Tipo_documento"] = [{ "DocumentSubject": tipo["@nombre"] }];
}
}
}
// Función principal para iniciar el procesamiento del JSON
function main() {
// Asigna tu JSON a una variable
// Accede a la estructura donde comienzan las categorías
var categorias = doc["EXPEDIENTE.OUTPUT"]["Tipos_documento"]["Categoria"];
// Procesa la categoría principal y sus subcategorías recursivamente
if (Array.isArray(categorias['Categoria'])) {
categorias["Categoria"].forEach((categoria) => {
processCategoria(categoria);
});
}
OnlyTipos(categorias)
categorias['DocumentSubject'] = categorias['@Nombre'];
categorias['DocumentService'] = categorias['Categoria'];
categorias['DocumentServiceType'] = categorias['Tipo_documento']
delete categorias['@Nombre'];
delete categorias['Categoria'];
delete categorias['Tipo_documento']
// console.log(categorias)
writeJsonToFile(categorias)
// Muestra el JSON modificado (si deseas verificar los cambios)
//console.log(JSON.stringify(jsonData, null, 2));
}
main();
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment