voici une solution simple basée sur l' jtc
utilitaire 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 $
si vous souhaitez appliquer des modifications directement dans le fichier json, utilisez le -f
commutateur, comme ceci:
bash $ jtc -f -w'<.*>D:' -eu echo '"{}"' \; file.json
La solution proposée fonctionnera correctement avec un jsons structuré arbitrairement, par exemple:
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 $
- si vous aimez citer des valeurs nulles, lancez simplement un chemin de promenade
-w'<>n:'
- si vous aimez citer des valeurs booléennes, lancez un chemin de promenade
-w'<any>b:'
De plus, la tâche inverse (ne pas citer tous les chiffres) est facilement réalisée de la même manière: disons, file.json
est déjà "interrogée", pour ne pas citer tous les chiffres:
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 $
MISE À JOUR : la dernière version des jtc
implémentations désormais des modèles et des espaces de noms. Avec cela, aucune invocation de shell externe n'est requise:
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
guide de l'utilisateur: https://github.com/ldn-softdev/jtc/blob/master/User%20Guide.md
{"a":{"b":1},"b":null}
à{ "a": "{\"b\":1}", "b": "null" }