it-swarm-id.com

Bagaimana cara memvalidasi JSON dalam PHP?

Apakah ada cara untuk memeriksa bahwa variabel adalah string JSON yang valid di PHP tanpa menggunakan json_last_error()? Saya tidak punya PHP 5.3.3.

20
user955822
$ob = json_decode($json);
if($ob === null) {
 // $ob is null because the json cannot be decoded
}
46
Jeff Lambert
$data = json_decode($json_string);
if (is_null($data)) {
   die("Something dun gone blowed up!");
}
10
Marc B

Jika Anda ingin memeriksa apakah input Anda adalah JSON yang valid, Anda mungkin juga tertarik untuk memvalidasi apakah mengikuti format tertentu atau tidak, yaitu skema. Dalam hal ini Anda dapat mendefinisikan skema Anda menggunakan JSON Schema dan memvalidasinya menggunakan library ini.

Contoh:

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

Validasi

<?php

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

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

$validator->isValid()
2
Jefferson Lima

Anda dapat memeriksa apakah nilai dari json_decode adalah null. Jika demikian, itu tidak valid.

2
Alex Turpin

Selanjutnya Anda dapat melihat pada http://php.net/manual/en/function.json-last-error-msg.php yang berisi implementasi dari fungsi yang hilang.

Salah satunya adalah:

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

(Disalin dari situs)

0