Hai bisogno di aiuto per la formattazione di JSON (in JavaScript) con Stringify e Regex replace
Mi manca qualcosa con la regex e sta rimuovendo l'ultima lettera di ogni elemento prima della virgola.
Codice d'esempio:
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, ', "');
Il risultato è:
"{
"a": {
"a1": "one, "is_active": tru, "a2": "two"
},
"b": {
"b1": "one, "is_active": tru, "b2": "two"
}
}"
Quello che sto cercando di ottenere è:
"{
"a": {
"a1": "one", "is_active": true, "a2": "two"
},
"b": {
"b1": "one", "is_active": true, "b2": "two"
}
}"
Le cose sbagliate:
"uno, dovrebbe essere" uno ",
" tru, dovrebbe essere "vero",
Risposte
Il tuo problema è che stai trovando la seguente sequenza di caratteri
- Qualsiasi carattere che non sia una parentesi graffa di chiusura
- Una virgola
- Un carattere di nuova riga
- Qualsiasi numero di spazi
E sostituendo l'intera sequenza . Poiché la "e" alla fine di "true" non è una parentesi graffa di chiusura, viene anch'essa sostituita.
Ciò di cui hai bisogno è che il primo elemento della sequenza sia "una virgola che viene immediatamente dopo una parentesi graffa di chiusura". Puoi farlo usando uno sguardo negativo .
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, "');
non sono sicuro che sia il modo migliore, ma è la prima cosa che mi è venuta in mente