Existem dados JSON que contêm alguns valores numéricos. Como converter todos os números em seqüências de caracteres? (enrole com aspas)
Exemplo:
{
"id":1,
"customer":"user",
"plate":"BMT-216-A",
"country":"GB",
"amount":1000,
"pndNumber":20000,
"zoneNumber":4
}
Deve se tornar
{
"id":"1",
"customer":"user",
"plate":"BMT-216-A",
"country":"GB",
"amount":"1000",
"pndNumber":"20000",
"zoneNumber":"4"
}
{"a":{"b":1},"b":null}
para{ "a": "{\"b\":1}", "b": "null" }
null
(ainda vale a pena observar a IMO, mesmo que a amostra do OP não possua nenhum deles).aqui está uma solução fácil baseada no
jtc
utilitário unix:se você deseja aplicar alterações diretamente no arquivo json, use a
-f
opção da seguinte maneira:A solução proposta funcionará corretamente com jsons estruturados arbitrários, por exemplo:
-w'<>n:'
-w'<any>b:'
Além disso, a tarefa reversa (entre aspas todos os números) é facilmente alcançada da mesma maneira: digamos,
file.json
já está "enquadrada", para aspas todos os números:ATUALIZAÇÃO : a versão mais recente dos
jtc
implementos agora modelos e espaços para nome. Com isso, nenhuma chamada de shell externo é necessária:jtc
guia do usuário: https://github.com/ldn-softdev/jtc/blob/master/User%20Guide.mdfonte
Citaria qualquer coisa que não é citado e não é
[]{}:,whitespace
, por isso, seria citar números,true
,false
enull
.Citaria especificamente o que corresponde à especificação de um número json e que ainda não está entre aspas.
Aqueles fazem uma tokenização exata com base na especificação JSON, não é uma aproximação.
fonte
Eu tentei com o método abaixo e funcionou bem.
Eu fiz pipeline duas vezes tentei até o meu nível para reduzi-lo
Comando:
Resultado:
fonte
\{1,\},
? Para testar se um elemento aparece uma ou mais vezes, use+
. E isso não vai funcionar para números como -123, 0xAB, 0o12, 0b1011, 1e23 ou 1.2e3 ...\{1,\}
é o equivalente BRE do ERE+
. Algumassed
implementações oferecem suporte\+
como uma extensão ou uma opção-E
ou-r
para ativar EREs, mas isso não é portátil.\?
é outra extensão não-portáteis embora cujo equivalente padrão é\{0,1\}