Il existe des données JSON qui contiennent des valeurs numériques. Comment convertir tous les chiffres en chaînes? (envelopper avec des citations)
Exemple:
{
"id":1,
"customer":"user",
"plate":"BMT-216-A",
"country":"GB",
"amount":1000,
"pndNumber":20000,
"zoneNumber":4
}
devrait devenir
{
"id":"1",
"customer":"user",
"plate":"BMT-216-A",
"country":"GB",
"amount":"1000",
"pndNumber":"20000",
"zoneNumber":"4"
}
{"a":{"b":1},"b":null}
à{ "a": "{\"b\":1}", "b": "null" }
null
(cela vaut toujours la peine de noter IMO même si l'échantillon de l'OP n'en a aucun).voici une solution simple basée sur l'
jtc
utilitaire unix:si vous souhaitez appliquer des modifications directement dans le fichier json, utilisez le
-f
commutateur, comme ceci:La solution proposée fonctionnera correctement avec un jsons structuré arbitrairement, par exemple:
-w'<>n:'
-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: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:jtc
guide de l'utilisateur: https://github.com/ldn-softdev/jtc/blob/master/User%20Guide.mdla source
Je citerais tout ce qui n'est pas cité et ce n'est pas le cas
[]{}:,whitespace
, de même que des chiffrestrue
,false
etnull
.Je citerais spécifiquement ce qui correspond à la spécification d'un nombre json et qui n'est pas déjà à l'intérieur de guillemets.
Ceux-ci effectuent une tokenisation exacte basée sur la spécification JSON, ce n'est pas une approximation.
la source
J'ai essayé avec la méthode ci-dessous et cela a bien fonctionné.
J'ai pipeliné 2 fois essayé jusqu'à mon niveau pour le réduire
Commander:
Production:
la source
\{1,\},
? Pour tester si un élément apparaît une ou plusieurs fois, utilisez+
. Et cela ne fonctionnera pas pour des nombres comme -123, 0xab, 0o12, 0b1011, 1e23 ou 1.2e3 ...\{1,\}
est l'équivalent BRE d'ERE+
. Certainessed
implémentations prennent\+
en charge une extension ou une option-E
ou-r
pour activer les ERE, mais ce n'est pas portable.\?
est une autre extension non portable mais dont l'équivalent standard est\{0,1\}