Besoin d'aide pour formater JSON (en JavaScript) avec Stringify et Regex replace
Il me manque quelque chose avec l'expression régulière et il supprime la dernière lettre de chaque élément avant la virgule.
Exemple de code:
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, ', "');
Le résultat est:
"{
"a": {
"a1": "one, "is_active": tru, "a2": "two"
},
"b": {
"b1": "one, "is_active": tru, "b2": "two"
}
}"
Ce que j'essaie d'obtenir, c'est:
"{
"a": {
"a1": "one", "is_active": true, "a2": "two"
},
"b": {
"b1": "one", "is_active": true, "b2": "two"
}
}"
Les choses qui ne vont pas:
"un, devrait être" un ",
" vrai, devrait être "vrai",
Réponses
Votre problème est que vous trouvez la séquence de caractères suivante
- Tout caractère qui n'est pas une accolade fermante
- Une virgule
- Un caractère de nouvelle ligne
- N'importe quel nombre d'espaces
Et en remplaçant toute la séquence . Puisque le "e" à la fin de "true" n'est pas une accolade fermante, il est également remplacé.
Ce dont vous avez besoin, c'est que le premier élément de la séquence soit "une virgule qui vient immédiatement après une accolade fermante". Vous pouvez le faire en utilisant un regard négatif en arrière .
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, "');
Je ne suis pas sûr que ce soit le meilleur moyen mais c'est la première chose qui m'est venue à l'esprit