JSON escape e unescape: trate dados aninhados corretamente

2024-04-15

Filas, logs e colunas de banco frequentemente guardam JSON como string dentro de JSON. Entender escapes e essencial para desembrulhar esses payloads.

Caracteres que precisam de escape

Em strings: ", \, e caracteres de controle como \n e \t.

{
  "quote": "He said \"Hello\"",
  "path": "C:\\temp\\data"
}

JSON aninhado como string

Primeiro faça parse do nivel externo e depois JSON.parse no campo string interno.

{ "payload": "{\"id\":1,\"name\":\"Alice\"}" }

Escape duplo em logs

Nao conte barras invertidas na mao: faça parse repetidas vezes ate chegar ao objeto ou string esperada.

Unescape seguro

Use JSON.parse, nao substituicoes com regex. Depois de parsear dados nao confiaveis, valide a estrutura (ex.: chaves __proto__).

Outros contextos (SQL, shell)

Escape de JSON nao e o mesmo que quoting de SQL ou shell. Monte objetos, aplique JSON.stringify e depois o escape especifico do contexto alvo.

Fluxo recomendado

Colar -> parsear -> formatar -> parse interno nos campos que ainda sao string -> validacao de negocio.