How to validate JSON in PHP?

后端 未结 5 2043
没有蜡笔的小新
没有蜡笔的小新 2020-12-15 16:41

Is there any way to check that a variable is a valid JSON string in PHP without using json_last_error()? I don\'t have PHP 5.3.3.

相关标签:
5条回答
  • 2020-12-15 17:19

    You could check if the value from json_decode is null. If so, it's invalid.

    0 讨论(0)
  • 2020-12-15 17:21

    If you want to check if your input is valid JSON, you might as well be interested in validating whether or not it follows a specific format, i.e a schema. In this case you can define your schema using JSON Schema and validate it using this library.

    Example:

    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"]
    }
    

    Validation

    <?php
    
    $data = '{"firstName":"Hermeto","lastName":"Pascoal"}';
    
    $validator = new JsonSchema\Validator;
    $validator->validate($data, (object)['$ref' => 'file://' . realpath('person.json')]);
    
    $validator->isValid()
    
    0 讨论(0)
  • 2020-12-15 17:32
    $ob = json_decode($json);
    if($ob === null) {
     // $ob is null because the json cannot be decoded
    }
    
    0 讨论(0)
  • 2020-12-15 17:40

    Furthermore you can have a look on http://php.net/manual/en/function.json-last-error-msg.php that contain implementations of the missing function.

    One of them is:

    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';
            }
        }
    

    (Copied pasted from the site)

    0 讨论(0)
  • 2020-12-15 17:41
    $data = json_decode($json_string);
    if (is_null($data)) {
       die("Something dun gone blowed up!");
    }
    
    0 讨论(0)
提交回复
热议问题