Это регулярное выражение в рубине. Я предполагаю, что, за исключением недостающих котировок, JSON хорошо сформирован. Этот код будет добавлять кавычки ко всем ключам и значениям без пустых значений без кавычек. Обратите внимание, что это добавит двойные кавычки к значениям, таким как числа, true
, false
, null
тоже.
jsonstr = <<'LOD'
{
menu: {
id: "file",
"value": File,
"popup": {
"videoIds":[2929365783001,2890489654001,2872798368001,...],
toto:titi,
"\"glip":["glop\\",glup]
}
}
}
LOD
jsonstr = jsonstr.gsub(
/(?x)
( # group 1: possible content before a value or key without double quotes
(?>
(?> "(?>[^"\\]++|\\{2}|\\.)*+")? # content inside double quotes
[\]\[}{:,\s]++ # spaces and special characters
)++
)
([^\]\[{},:"]+?) # group 2: value or key without double quotes
(?= \s* (?: [\]:,}] | \z))
/,
'\1"\2"')
puts jsonstr
Группа 1 используется для пропуска всех ключей или значений между двойными кавычками.
Любой ответ JSON, или только этот конкретный? Если это возможно, это невозможно сделать с помощью регулярного выражения. –
Есть ли возможность исправить это в том месте, где этот JSON создается вместо потом? Вот пример того, как вы могли бы сделать это для этого конкретного сценария: http://regex101.com/r/fN7tA1 –
@scrowler это ответ json от яркой вырезки. Я пытаюсь разобрать этот ответ в приложении Roku – kilomo