Обработка искаженного JSON в PHP

Я пытаюсь написать 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);

Конечно, это сломается, если данные будут содержать кавычки, скобки или запятые.

9
задан Chris 27 July 2011 в 15:35
поделиться