Necesita ayuda para formatear JSON (en JavaScript) con reemplazo de Stringify y Regex
Me falta algo con la expresión regular y está eliminando la última letra de cada elemento antes de la coma.
Código de muestra:
let test_json = {
"a" : { "a1" : "one", "is_active" : true, "a2" : "two" },
"b" : { "b1" : "one", "is_active" : true, "b2" : "two" }
};
JSON.stringify(test_json, null, 3).replace(/[^}],\n( )*"/g, ', "');
El resultado es:
"{
"a": {
"a1": "one, "is_active": tru, "a2": "two"
},
"b": {
"b1": "one, "is_active": tru, "b2": "two"
}
}"
Lo que estoy tratando de conseguir es:
"{
"a": {
"a1": "one", "is_active": true, "a2": "two"
},
"b": {
"b1": "one", "is_active": true, "b2": "two"
}
}"
Las cosas que están mal:
"uno, debería ser" uno ",
" tru, debería ser "verdadero",
Respuestas
Tu problema es que estás encontrando la siguiente secuencia de caracteres
- Cualquier personaje que no sea una llave de cierre
- Una coma
- Un personaje de nueva línea
- Cualquier cantidad de espacios
Y reemplazando toda la secuencia . Dado que la "e" al final de "verdadero" no es una llave de cierre, también se reemplaza.
Lo que necesita es que el primer elemento de la secuencia sea "una coma que venga inmediatamente después de una llave de cierre". Puede hacer esto usando una mirada atrás negativa .
let test_json = {
a: {
a1: "one",
is_active: true,
a2: "two"
},
b: {
b1: "one",
is_active: true,
b2: "two"
},
};
const result = JSON.stringify(test_json, null, 3).replace(
/(?<!}),\n\s*/g,
", "
);
console.log(result);
JSON.stringify(test_json,null,3).replace(/([^}]?),\n( )*"/g, '$1, "');
No estoy seguro de si es la mejor manera, pero es lo primero que me viene a la mente.