Я пытаюсь написать php-скрипт, который обрабатывает данные из веб-службы, доставляющей «json» в виде строки. Проблема в том, что строка на самом деле не json; это javascript. В частности, ключи не цитируются, хотя переменные указаны. Пример (фактические данные намного длиннее и сложнее):
{desc:'User defined payload'}
Как описано в руководстве по php , json_decode () не может правильно интерпретировать эту строку.
У меня вопрос, как я могу успешно интерпретировать такую строку в php?
Единственное решение, которое я могу придумать, - это написать несколько регулярных выражений, исправляющих синтаксис, но тогда у меня возникнут две проблемы.
РЕДАКТИРОВАТЬ
Предложение Хадвига об использовании грушевого модуля Services_JSON сработало и выглядит как общее решение. После установки модуля мой код выглядел так:
require_once 'PEAR.php';
require_once 'Services/JSON.php';
$Services_JSON = new Services_JSON();
$data = $Services_JSON->decode($malformed_json);
К сожалению, это МЕДЛЕННО. Для интерпретации всей строки (~ 400 000 символов) потребовалось> 36 секунд! Использование регулярного выражения для исправления кавычек и последующего использования json_decode заняло ~ 0,04 секунды. Вот что я использовал:
// fix single quotes
$s = str_replace("'", '"', $malformed_json);
// fix unquoted keys
$valid_json = preg_replace('/([{\[,])\s*([a-zA-Z0-9_]+?):/', '$1"$2":', $s);
$data = json_decode($valid_json);
Конечно, это сломается, если данные будут содержать кавычки, скобки или запятые.