Benötigen Sie Hilfe bei der Formatierung von JSON (in JavaScript) mit Stringify und Regex ersetzen

Jan 19 2021

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

3 BenWainwright Jan 19 2021 at 06:36

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);

1 MCP Jan 19 2021 at 06:31
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