Как проверить JSON в PHP? - PullRequest
23 голосов
/ 21 октября 2011

Есть ли способ проверить, является ли переменная допустимой строкой JSON в PHP без использования json_last_error()? У меня нет PHP 5.3.3.

Ответы [ 5 ]

50 голосов
/ 21 октября 2011
$ob = json_decode($json);
if($ob === null) {
 // $ob is null because the json cannot be decoded
}
9 голосов
/ 21 октября 2011
$data = json_decode($json_string);
if (is_null($data)) {
   die("Something dun gone blowed up!");
}
3 голосов
/ 10 ноября 2017

Если вы хотите проверить, является ли ваш ввод действительным JSON, вам также может быть интересно проверить, соответствует ли он определенному формату, то есть схеме.В этом случае вы можете определить свою схему с помощью JSON Schema и проверить ее с помощью этой библиотеки .

Пример:

person.json

{
    "title": "Person",
    "type": "object",
    "properties": {
        "firstName": {
            "type": "string"
        },
        "lastName": {
            "type": "string"
        },
        "age": {
            "description": "Age in years",
            "type": "integer",
            "minimum": 0
        }
    },
    "required": ["firstName", "lastName"]
}

Проверка

<?php

$data = '{"firstName":"Hermeto","lastName":"Pascoal"}';

$validator = new JsonSchema\Validator;
$validator->validate($data, (object)['$ref' => 'file://' . realpath('person.json')]);

$validator->isValid()
2 голосов
/ 27 сентября 2017

Кроме того, вы можете посмотреть на http://php.net/manual/en/function.json-last-error-msg.php, который содержит реализации отсутствующей функции.

Одна из них:

if (!function_exists('json_last_error_msg')) {
        function json_last_error_msg() {
            static $ERRORS = array(
                JSON_ERROR_NONE => 'No error',
                JSON_ERROR_DEPTH => 'Maximum stack depth exceeded',
                JSON_ERROR_STATE_MISMATCH => 'State mismatch (invalid or malformed JSON)',
                JSON_ERROR_CTRL_CHAR => 'Control character error, possibly incorrectly encoded',
                JSON_ERROR_SYNTAX => 'Syntax error',
                JSON_ERROR_UTF8 => 'Malformed UTF-8 characters, possibly incorrectly encoded'
            );

            $error = json_last_error();
            return isset($ERRORS[$error]) ? $ERRORS[$error] : 'Unknown error';
        }
    }

(скопировано вставлено с сайта)

1 голос
/ 21 октября 2011

Вы можете проверить, является ли значение из json_decode null.Если это так, это недействительно.

...