一部のJSONデータには数値が含まれています。すべての数値を文字列に変換するには? (引用符で囲む)
例:
{
"id":1,
"customer":"user",
"plate":"BMT-216-A",
"country":"GB",
"amount":1000,
"pndNumber":20000,
"zoneNumber":4
}
しなければならない
{
"id":"1",
"customer":"user",
"plate":"BMT-216-A",
"country":"GB",
"amount":"1000",
"pndNumber":"20000",
"zoneNumber":"4"
}
ベストアンサー1
$ jq 'map_values(tostring)' file.json
{
"id": "1",
"customer": "user",
"plate": "BMT-216-A",
"country": "GB",
"amount": "1000",
"pndNumber": "20000",
"zoneNumber": "4"
}
新しいファイルにリダイレクトし、元のファイル名に移動します。
非フラット構造の数値を文字列により徹底的に変換するには、次の点を考慮してください。
jq '(..|select(type == "number")) |= tostring' file.json
その後、与えられた文書のすべての値を再帰的に確認し、番号を選択します。次に、選択した値を文字列に変換します。技術的にはキーもチェックしますが、JSONでは純粋な数字にすることはできないため、キーは選択されません。
例:
$ jq . file.json
{
"a": {
"b": 1
},
"b": null,
"c": [
1,
2,
"hello",
4
]
}
$ jq '(..|select(type == "number")) |= tostring' file.json
{
"a": {
"b": "1"
},
"b": null,
"c": [
"1",
"2",
"hello",
"4"
]
}
別途参照するには、次のようにnull
変更してください。select()
select(type == "number" or type == "null")