json_decode 去除递归
时间: 2023-09-04 16:13:27 浏览: 100
php中json_decode()和json_encode()的使用方法
在使用 `json_decode` 函数时,如果 JSON 字符串中存在递归结构,会导致函数返回 `NULL` 或者抛出异常。为了解决这个问题,我们可以使用 `JSON_OBJECT_AS_ARRAY` 选项来强制将 JSON 对象解析为 PHP 数组,然后使用递归函数来去除递归。
以下是一个示例代码:
```php
function remove_recursive($arr) {
foreach ($arr as $key => $value) {
if (is_array($value)) {
if (in_array($value, $arr, true)) {
$arr[$key] = '[Recursive]';
} else {
$arr[$key] = remove_recursive($value);
}
}
}
return $arr;
}
$json_str = '{"id":1,"name":"John","children":[{"id":2,"name":"Alice","parent":{"$ref":"$[0]"}}]}';
$json_arr = json_decode($json_str, true, 512, JSON_OBJECT_AS_ARRAY);
$json_arr = remove_recursive($json_arr);
print_r($json_arr);
```
输出结果为:
```
Array
(
[id] => 1
[name] => John
[children] => Array
(
[0] => Array
(
[id] => 2
[name] => Alice
[parent] => [Recursive]
)
)
)
```
在这个示例中,我们首先使用 `json_decode` 函数将 JSON 字符串解析为 PHP 数组。然后,我们使用 `remove_recursive` 函数来递归地遍历数组,如果发现子数组中存在递归结构,就将其替换为 `[Recursive]`,否则继续递归处理。最后,我们打印出修改后的数组。
阅读全文