Precisa de ajuda na formatação de JSON (em JavaScript) com Stringify e Regex replace
Estou faltando algo com o regex e ele está removendo a última letra de cada item antes da vírgula.
Código de amostra:
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, ', "');
O resultado é:
"{
"a": {
"a1": "one, "is_active": tru, "a2": "two"
},
"b": {
"b1": "one, "is_active": tru, "b2": "two"
}
}"
O que estou tentando obter é:
"{
"a": {
"a1": "one", "is_active": true, "a2": "two"
},
"b": {
"b1": "one", "is_active": true, "b2": "two"
}
}"
As coisas que estão erradas:
"um, deveria ser" um ",
" tru, deveria ser "verdadeiro",
Respostas
3 BenWainwright
Seu problema é que você está encontrando a seguinte sequência de caracteres
- Qualquer caractere que não seja uma chave de fechamento
- Uma vírgula
- Um caractere de nova linha
- Qualquer número de espaços
E substituindo toda a sequência . Como o "e" no final de "verdadeiro" não é uma chave de fechamento, ele também é substituído.
O que você precisa é que o primeiro item na sequência seja "uma vírgula que vem imediatamente após uma chave de fechamento". Você pode fazer isso usando um lookbehind 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);
1 MCP
JSON.stringify(test_json,null,3).replace(/([^}]?),\n( )*"/g, '$1, "');
não tenho certeza se é a melhor maneira, mas é a primeira coisa que me vem à mente
O que significa um erro “Não é possível encontrar o símbolo” ou “Não é possível resolver o símbolo”?
George Harrison ficou chateado por suas letras de 'Hurdy Gurdy Man' de Donovan não terem sido usadas