ecco una soluzione semplice basata jtc
sull'utilità unix:
bash $ jtc -w'<.*>D:' -eu echo '"{}"' \; file.json
{
"amount": "1000",
"country": "GB",
"customer": "user",
"id": "1",
"plate": "BMT-216-A",
"pndNumber": "20000",
"zoneNumber": "4"
}
bash $
se ti piace applicare le modifiche direttamente nel file json, usa l' -f
opzione, in questo modo:
bash $ jtc -f -w'<.*>D:' -eu echo '"{}"' \; file.json
La soluzione proposta funzionerà correttamente con un json strutturato arbitrario, ad esempio:
bash $ jtc -w'<.*>D:' -eu echo '"{}"' \; file.json
{
"amount": "1000",
"country": "GB",
"customer": "user",
"id": "1",
"plate": "BMT-216-A",
"pndNumber": "20000",
"sub": {
"subvalue": "123"
},
"zoneNumber": "4"
}
bash $
- se ti piace citare valori null, basta lanciare un percorso
-w'<>n:'
- se ti piace citare valori booleani, lancia un percorso
-w'<any>b:'
Inoltre, l'attività inversa (annulla tutte le cifre) viene facilmente eseguita nello stesso modo: diciamo, file.json
è già "enquotata", per annullare la citazione di tutte le cifre:
bash $ jtc -w'<^\d+$>R:' -eu echo {-} \; file.json
{
"amount": 1000,
"country": "GB",
"customer": "user",
"id": 1,
"plate": "BMT-216-A",
"pndNumber": 20000,
"zoneNumber": 4
}
bash $
AGGIORNAMENTO : l'ultima versione di jtc
implementa ora modelli e spazi dei nomi. Con ciò non è richiesta alcuna chiamata alla shell esterna:
bash $ jtc -w'<.*>D:' -u'<.*>D:<val>v' -T'"{val}"' file.json
{
"amount": "1000",
"country": "GB",
"customer": "user",
"id": "1",
"plate": "BMT-216-A",
"pndNumber": "20000",
"zoneNumber": "4"
}
jtc
guida per l'utente: https://github.com/ldn-softdev/jtc/blob/master/User%20Guide.md
{"a":{"b":1},"b":null}
in{ "a": "{\"b\":1}", "b": "null" }