Есть данные 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"
}
{"a":{"b":1},"b":null}
на{ "a": "{\"b\":1}", "b": "null" }
null
(все же стоит отметить IMO, хотя в выборке OP этого нет).Вот простое решение на основе
jtc
утилиты Unix:если вы хотите применить изменения прямо к файлу json, используйте
-f
переключатель, например так:Предложенное решение будет корректно работать с произвольными структурированными jsons, например:
-w'<>n:'
-w'<any>b:'
Кроме того, обратная задача (отменить кавычки для всех чисел) легко достигается аналогичным образом: скажем,
file.json
уже "заключена в кавычки", чтобы снять все кавычки:ОБНОВЛЕНИЕ : последняя версия
jtc
реализует теперь шаблоны и пространства имен. При этом не требуется вызова внешней оболочки:jtc
руководство пользователя: https://github.com/ldn-softdev/jtc/blob/master/User%20Guide.mdисточник
Процитировал бы все, что не указано и нет
[]{}:,whitespace
, поэтому процитировал бы числаtrue
,false
иnull
.Специально процитировал бы то, что соответствует спецификации числа json, а что нет внутри кавычек.
Те делают точный токенизатор на основе спецификации JSON, это не приближение.
источник
Я попытался с помощью метода ниже, и он работал нормально.
Я конвейер 2 раза пытался до своего уровня, чтобы уменьшить его
Команда:
Вывод:
источник
\{1,\},
? Чтобы проверить, появляется ли элемент один или несколько раз, используйте+
. И это не будет работать для чисел, таких как -123, 0xab, 0o12, 0b1011, 1e23 или 1.2e3 ...\{1,\}
- это BRE-эквивалент ERE+
. Некоторыеsed
реализации поддерживают\+
как расширение или параметр-E
или-r
для включения ERE, но это не переносимо.\?
это еще одно\{0,1\}