Ada data JSON yang berisi beberapa nilai numerik. Bagaimana cara mengubah semua angka menjadi string? (bungkus dengan tanda kutip)
Contoh:
{
"id":1,
"customer":"user",
"plate":"BMT-216-A",
"country":"GB",
"amount":1000,
"pndNumber":20000,
"zoneNumber":4
}
harus menjadi
{
"id":"1",
"customer":"user",
"plate":"BMT-216-A",
"country":"GB",
"amount":"1000",
"pndNumber":"20000",
"zoneNumber":"4"
}
{"a":{"b":1},"b":null}
menjadi{ "a": "{\"b\":1}", "b": "null" }
null
(masih layak dicatat IMO meskipun sampel OP tidak memilikinya).inilah solusi mudah berdasarkan
jtc
utilitas unix:jika Anda ingin menerapkan perubahan langsung ke file json, gunakan
-f
sakelar, seperti ini:Solusi yang diusulkan akan bekerja dengan benar dengan jsons terstruktur sewenang-wenang, misalnya:
-w'<>n:'
-w'<any>b:'
Selain itu, tugas terbalik (tanda kutip semua angka) mudah dicapai dengan cara yang sama: katakanlah,
file.json
sudah "dikutip", untuk membatalkan tanda kutip semua angka:UPDATE : versi terbaru dari
jtc
implement sekarang template dan namespaces Dengan itu tidak ada permintaan shell eksternal diperlukan:jtc
panduan pengguna: https://github.com/ldn-softdev/jtc/blob/master/User%20Guide.mdsumber
Akan mengutip apa pun yang tidak dikutip dan tidak
[]{}:,whitespace
, maka akan mengutip angkatrue
,,false
dannull
.Secara khusus akan mengutip apa yang cocok dengan spesifikasi nomor json dan itu belum ada di dalam tanda kutip.
Mereka melakukan token yang tepat berdasarkan spesifikasi JSON, itu bukan perkiraan.
sumber
Saya mencoba dengan metode di bawah ini dan itu bekerja dengan baik.
Saya pipelined 2 kali mencoba hingga level saya untuk menguranginya
Perintah:
Keluaran:
sumber
\{1,\},
? Untuk menguji apakah suatu elemen muncul satu kali atau lebih, gunakan+
. Dan ini tidak akan berfungsi untuk angka seperti -123, 0xab, 0o12, 0b1011, 1e23 atau 1.2e3 ...\{1,\}
adalah setara BRE dari ERE+
. Beberapased
implementasi mendukung\+
sebagai ekstensi-E
atau-r
opsi untuk mengaktifkan ERE tetapi itu tidak portabel.\?
adalah ekstensi non-portabel yang standar padanannya adalah\{0,1\}