Benötigen Sie Hilfe bei der Formatierung von JSON (in JavaScript) mit Stringify und Regex ersetzen
Ich vermisse etwas mit dem regulären Ausdruck und es entfernt den letzten Buchstaben jedes Elements vor dem Komma.
Beispielcode:
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, ', "');
Das Ergebnis ist:
"{
"a": {
"a1": "one, "is_active": tru, "a2": "two"
},
"b": {
"b1": "one, "is_active": tru, "b2": "two"
}
}"
Was ich versuche zu bekommen ist:
"{
"a": {
"a1": "one", "is_active": true, "a2": "two"
},
"b": {
"b1": "one", "is_active": true, "b2": "two"
}
}"
Die Dinge, die falsch sind:
"eins, sollte" eins "sein,
" wahr, sollte "wahr" sein,
Antworten
Ihr Problem ist, dass Sie die folgende Zeichenfolge finden
- Jedes Zeichen, das keine schließende Klammer ist
- Ein Komma
- Ein Zeilenumbruchzeichen
- Beliebig viele Leerzeichen
Und die gesamte Sequenz ersetzen . Da das "e" am Ende von "true" keine schließende Klammer ist, wird es ebenfalls ersetzt.
Was Sie brauchen, ist, dass das erste Element in der Sequenz "ein Komma ist, das unmittelbar nach einer schließenden Klammer steht". Sie können dies mit einem negativen Lookbehind tun .
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, "');
Ich bin mir nicht sicher, ob es der beste Weg ist, aber es ist das erste, was mir in den Sinn kam