(PECL simdjson >= 2.0.0)
simdjson_is_valid — 檢查 JSON 字串是否有效
json
正在驗證的 json
字串。
此函數僅適用於 UTF-8 編碼的字串。
此函數驗證 json_decode() 可以解碼的輸入,前提是它們的長度小於 4 GiB。
depth
正在驗證的結構的最大嵌套深度。該值必須大於 0
,且小於或等於 2147483647
。呼叫者應使用合理的小值,因為較大的深度需要更多的緩衝區空間,並且會增加遞迴深度,這與目前的 json_decode() 實作不同。
如果 json
長度超過 4 GiB,則從 PECL simdjson 2.1.0 開始會拋出 SimdJsonException,而在此之前,會拋出 RuntimeException。
如果 depth
超出允許範圍,則從 PECL simdjson 3.0.0 開始會拋出 SimdJsonValueError,而在此之前,會引發層級為 E_WARNING
的錯誤。
範例 #1 simdjson_decode() 範例
<?php
$json = '{"a":1,"b":2,"c":3}';
$invalidJson = '{"a":1,"b":2,"c":';
var_dump(simdjson_is_valid($json));
var_dump(simdjson_is_valid($invalidJson));
?>
上述範例將輸出
bool(true) bool(false)
範例 #2 depth
錯誤
<?php
// 以最大深度 4 編碼一些數據
// (陣列 -> 陣列 -> 陣列 -> 字串)
$json = json_encode(
[
1 => [
'English' => [
'One',
'January'
],
'French' => [
'Une',
'Janvier'
]
]
]
);
// 顯示不同深度的錯誤。
var_dump(simdjson_is_valid($json, 4));
var_dump(simdjson_is_valid($json, 3));
?>
上述範例將輸出
bool(true) bool(false)
備註:
JSON 規範並非 JavaScript,而是 JavaScript 的子集。
備註:
如果解碼失敗,會拋出 SimdJsonException,並且可以使用 SimdJsonException::getCode() 和 SimdJsonException::getMessage() 來判斷錯誤的確切性質。