Hier ist eine einfache Lösung, die auf dem jtc
Unix-Dienstprogramm basiert :
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 $
Wenn Sie Änderungen direkt in die JSON-Datei übernehmen möchten, verwenden Sie den -f
Schalter wie folgt:
bash $ jtc -f -w'<.*>D:' -eu echo '"{}"' \; file.json
Die vorgeschlagene Lösung funktioniert korrekt mit beliebig strukturierten jsons, z.
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 $
- Wenn Sie Nullwerte angeben möchten, geben Sie einfach einen Gehweg ein
-w'<>n:'
- Wenn Sie boolesche Werte zitieren möchten, geben Sie einen Gehweg ein
-w'<any>b:'
Auch die umgekehrte Aufgabe (alle Zahlen aufheben) kann auf ähnliche Weise leicht erreicht werden: Sagen wir, sie file.json
ist bereits "enquoted", um alle Zahlen aufzuheben:
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 $
UPDATE : Die neueste Version von jtc
implementiert jetzt Vorlagen und Namespaces. Damit ist kein Aufruf der externen Shell erforderlich:
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
Benutzerhandbuch: https://github.com/ldn-softdev/jtc/blob/master/User%20Guide.md
{"a":{"b":1},"b":null}
zu{ "a": "{\"b\":1}", "b": "null" }