O que aconteceu
Com o lançamento do Go 1.27, o pacote encoding/json/v2 e seu complemento encoding/json/jsontext alcançaram o status estável e estão abertos ao uso geral, informou o Go. A publicação de 4 de novembro de 2026 teve sete autores, entre eles Joe Tsai, Damien Neil, Daniel Martí e Michael Pratt. Ela sucede uma versão experimental da API, apresentada no ano anterior, que foi refinada após novos comentários da comunidade.
Os autores afirmaram que o pacote original encoding/json se mostrou flexível, mas carrega falhas apontadas pelos usuários ao longo dos anos. Ele tolera UTF-8 inválido, o que a RFC 8259 proíbe. Também aceita objetos com nomes de membros repetidos, uma fraqueza que atacantes já exploraram, por exemplo na CVE-2017-12635. Além disso, ele associa nomes de campos sem distinguir maiúsculas de minúsculas e codifica slices e maps nil como null.
Segundo a publicação, esses comportamentos não poderiam ser corrigidos sem quebrar a promessa de compatibilidade do Go 1. O mesmo vale para limites de desempenho, como manter valores inteiros em buffer na memória e lentidões quadráticas quando métodos personalizados chamam Marshal ou Unmarshal de forma recursiva. O novo projeto divide o trabalho em dois: o jsontext cuida da sintaxe JSON sem depender de reflection, enquanto o json/v2 mapeia valores JSON para tipos do Go.
Contexto
O Go oferece suporte a JSON em sua biblioteca padrão desde antes do Go 1.0, e os autores descrevem o JSON como o formato de dados mais usado da internet. Como os problemas decorrem da própria API existente, eles optaram por um namespace v2 separado, em vez de adicionar funções paralelas, como MarshalV2, dentro do pacote original. Uma pesquisa citada na publicação constatou que a maioria dos usuários de Go quer slices e maps nil codificados como arrays ou objetos vazios.
O briefing
A semana em tecnologia, em um só e-mail.
As reportagens que valem o seu tempo, toda semana. Cancele quando quiser.
