Potrzebujesz pomocy w formatowaniu JSON (w JavaScript) z zamianą Stringify i Regex
Brakuje mi czegoś w wyrażeniu regularnym i usuwa ostatnią literę każdego elementu przed przecinkiem.
Przykładowy kod:
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, ', "');
Wynik to:
"{
"a": {
"a1": "one, "is_active": tru, "a2": "two"
},
"b": {
"b1": "one, "is_active": tru, "b2": "two"
}
}"
To, co próbuję uzyskać, to:
"{
"a": {
"a1": "one", "is_active": true, "a2": "two"
},
"b": {
"b1": "one", "is_active": true, "b2": "two"
}
}"
Rzeczy, które są złe:
„jeden, powinien być„ jeden ”,
„ prawda, powinien być „prawdziwy”,
Odpowiedzi
Twój problem polega na tym, że znajdujesz następującą sekwencję znaków
- Dowolny znak, który nie jest nawiasem zamykającym
- Przecinek
- Znak nowego wiersza
- Dowolna liczba spacji
I zastępując całą sekwencję . Ponieważ litera „e” na końcu wyrażenia „prawda” nie jest nawiasem zamykającym, jest również zastępowana.
To, czego potrzebujesz, to aby pierwszy element w sekwencji był „przecinkiem znajdującym się bezpośrednio po nawiasie zamykającym”. Możesz to zrobić, używając negatywnego lookbehind .
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, "');
Nie jestem pewien, czy to najlepszy sposób, ale to pierwsza rzecz, która przyszła mi do głowy