Hay datos JSON que contienen algunos valores numéricos. ¿Cómo convertir todos los números a cadenas? (envolver con comillas)
Ejemplo:
{
        "id":1,
        "customer":"user",
        "plate":"BMT-216-A",
        "country":"GB",
        "amount":1000,
        "pndNumber":20000,
        "zoneNumber":4
}
debe convertirse
{
        "id":"1",
        "customer":"user",
        "plate":"BMT-216-A",
        "country":"GB",
        "amount":"1000",
        "pndNumber":"20000",
        "zoneNumber":"4"
}
                
{"a":{"b":1},"b":null}a{ "a": "{\"b\":1}", "b": "null" }null(aún vale la pena señalar IMO, aunque la muestra del OP no tiene ninguno de esos).Aquí hay una solución fácil basada en la
jtcutilidad Unix:si desea aplicar cambios directamente en el archivo json, use el
-finterruptor, de esta manera:La solución propuesta funcionará correctamente con un json estructurado arbitrario, por ejemplo:
-w'<>n:'-w'<any>b:'Además, la tarea inversa (poner entre comillas todos los números) se logra fácilmente de la misma manera: digamos,
file.jsonya está "entrecomillado", para poner entre comillas todos los números:ACTUALIZACIÓN : la última versión de
jtcimplementos ahora plantillas y espacios de nombres. Con eso no se requiere invocación de shell externo:jtcguía del usuario: https://github.com/ldn-softdev/jtc/blob/master/User%20Guide.mdfuente
Citaría cualquier cosa que no se cite y no
[]{}:,whitespacese cite, así que citaría númerostrue,falseynull.Citaría específicamente lo que coincide con la especificación de un número json y eso no está dentro de las comillas.
Esos hacen una tokenización exacta basada en la especificación JSON, no es una aproximación.
fuente
Intenté con el siguiente método y funcionó bien.
Conduje 2 veces hasta mi nivel para reducirlo
Mando:
Salida:
fuente
\{1,\},? Para probar si un elemento aparece una o más veces, use+. Y esto no funcionará para números como -123, 0xab, 0o12, 0b1011, 1e23 o 1.2e3 ...\{1,\}es el equivalente BRE de ERE+. Algunassedimplementaciones admiten\+como una extensión o una-Eo-ropción para activar EREs pero eso no es portátil.\?es otra extensión no portátil, aunque cuyo equivalente estándar es\{0,1\}