2024 年 PHP 日本研討會

simdjson_is_valid

(PECL simdjson >= 2.0.0)

simdjson_is_valid檢查 JSON 字串是否有效

說明

simdjson_is_valid(字串 $json = false, 整數 $depth = 512): 布林值

接受一個 JSON 編碼的字串,並在有效時返回 true。

參數

json

正在驗證的 json 字串

此函數僅適用於 UTF-8 編碼的字串。

此函數驗證 json_decode() 可以解碼的輸入,前提是它們的長度小於 4 GiB。

depth

正在驗證的結構的最大嵌套深度。該值必須大於 0,且小於或等於 2147483647。呼叫者應使用合理的小值,因為較大的深度需要更多的緩衝區空間,並且會增加遞迴深度,這與目前的 json_decode() 實作不同。

返回值

如果 json 是有效的 JSON 字串,則返回 true,否則返回 false

錯誤/例外

如果 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() 來判斷錯誤的確切性質。

另請參閱

新增備註

使用者提供的備註

此頁面沒有使用者提供的備註。
To Top