В PHP функция json_decode широко используется для преобразования строки JSON в объект PHP или ассоциативный массив. По умолчанию функция ожидает, что строка JSON будет содержать ключи и строковые значения в кавычках. Однако существуют сценарии, в которых вы можете столкнуться с данными JSON без кавычек, и вам необходимо соответствующим образом проанализировать их. В этой статье мы рассмотрим различные методы декодирования JSON без кавычек, попутно предоставляя вам практические примеры кода.
Метод 1: использование preg_replace
Один из способов анализа JSON без кавычек — использовать функцию preg_replace для добавления кавычек вокруг ключей и значений без кавычек перед его декодированием с помощью json_decode. Вот пример:
$jsonString = '{name: "John", age: 30}';
$quotedJsonString = preg_replace('/([{,])(\s*)([A-Za-z0-9_\-]+?)\s*:/', '$1"$3":', $jsonString);
$decodedData = json_decode($quotedJsonString);
Метод 2. Пользовательский анализ с использованием регулярных выражений.
Другой подход заключается в создании пользовательской функции анализа с использованием регулярных выражений. Этот метод позволяет обрабатывать более сложные случаи, когда структура JSON может отличаться. Вот упрощенный пример:
function decodeJsonWithoutQuotes($jsonString) {
$pattern = '/([A-Za-z0-9_\-]+?)\s*:/';
$quotedJsonString = preg_replace($pattern, '"$1":', $jsonString);
return json_decode($quotedJsonString);
}
$jsonString = '{name: "John", age: 30}';
$decodedData = decodeJsonWithoutQuotes($jsonString);
Метод 3: использование токенизатора PHP
Токенизатор PHP позволяет разбирать исходный код PHP на токены. Используя эту функцию, мы можем извлечь ключи и значения без кавычек и отформатировать их как действительную строку JSON перед ее декодированием. Вот пример:
function decodeJsonWithoutQuotes($jsonString) {
$tokens = token_get_all('<?php ' . $jsonString);
$formattedJsonString = '';
foreach ($tokens as $token) {
if (is_array($token)) {
if ($token[0] === T_STRING) {
$formattedJsonString .= '"' . $token[1] . '":';
} else {
$formattedJsonString .= $token[1];
}
} else {
$formattedJsonString .= $token;
}
}
return json_decode($formattedJsonString);
}
$jsonString = '{name: "John", age: 30}';
$decodedData = decodeJsonWithoutQuotes($jsonString);
Разбор JSON без кавычек в PHP на первый взгляд может показаться сложной задачей, но благодаря методам, продемонстрированным в этой статье, у вас теперь есть несколько подходов к ее решению. Независимо от того, решите ли вы использовать preg_replace, пользовательские регулярные выражения или токенизатор PHP, вы можете обрабатывать различные сценарии, в которых присутствуют ключи и значения без кавычек. Поэкспериментируйте с этими методами и выберите тот, который лучше всего подходит для вашего конкретного случая использования.
Включив эти методы в свой PHP-код, вы сможете уверенно обрабатывать данные JSON без кавычек, расширяя свои возможности эффективной работы с различными источниками JSON.