Нужна помощь в форматировании JSON (в JavaScript) с заменой Stringify и Regex
Мне что-то не хватает с регулярным выражением, и он удаляет последнюю букву каждого элемента перед запятой.
Образец кода:
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, ', "');
Результат:
"{
"a": {
"a1": "one, "is_active": tru, "a2": "two"
},
"b": {
"b1": "one, "is_active": tru, "b2": "two"
}
}"
Я пытаюсь получить следующее:
"{
"a": {
"a1": "one", "is_active": true, "a2": "two"
},
"b": {
"b1": "one", "is_active": true, "b2": "two"
}
}"
То, что неправильно:
«один, должен быть один»,
«правда, должен быть»,
Ответы
Ваша проблема в том, что вы находите следующую последовательность символов
- Любой символ, не являющийся закрывающей скобкой
- Запятая
- Символ новой строки
- Любое количество пробелов
И заменяя всю последовательность . Поскольку буква «e» в конце слова «true» не является закрывающей фигурной скобкой, она также заменяется.
Вам нужно, чтобы первым элементом в последовательности была «запятая, которая идет сразу после закрывающей фигурной скобки». Вы можете сделать это, используя отрицательный ретроспективный просмотр .
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, "');
не уверен, что это лучший способ, но это первое, что пришло в голову