Quero comparar muitos documentos JSON sem me importar com uma precisão maior que 2 dígitos. Quero arredondar qualquer número em um documento JSON, mas não sei onde os números estão nos documentos (mas eles não são chaves).
Atualmente, estou usando apenas uma regex ( sed 's/\(\.[0-9][0-9]\)[0-9]*/\1/g'
), mas assim, 0.9999
ou 1.0001
tenho o mesmo resultado.
Eu sei como fazer isso quando sei em quais caminhos os números estão, mas como faço isso se não especifico nenhuma localização dos números no documento?
Desta fonte:
{
"a": -4e-12,
"b": {
"c": 0.999999999999997,
"d": 101.12222222222
}
}
Eu esperaria um resultado como:
{
"a": 0,
"b": {
"c": 1,
"d": 101.12
}
}
Você pode percorrer o objeto json e, se for um número, multiplicar por 100, arredondar e, em seguida, dividir por 100. Isso dará duas posições decimais (não dois algarismos significativos). Mas ele produz sua saída esperada, no entanto
a = -0
jq 'walk(if type == "number" then (.* 100 | round / 100) else . end)' data.json