php - json_encode 可以触发 catch block 吗?

标签 php json

<分区>

这可能是一个非常简单的问题,但我找不到任何相关信息。

我使用的系统会聚合来自各种来源的大量数据,然后将这些数据存储在数据库中。在大多数情况下,系统运行良好,但偶尔我们会遇到一个问题,即数据可能具有我们的系统不喜欢的笨拙字符编码(例如,当数据使用另一种语言,如法语)。

数据被传递到我们的处理服务器(我们使用 Gearman),为了确保与源相关的所有信息都被传递,我们对一个包含我们需要的一切的数组进行 json_encode 编码。我的问题是:如果我将 json_encode 包装在 try/catch block 中,导致“PHP 警告:json_encode():参数中的无效 UTF-8 序列”消息的事情是否会触发 catch block 激活?

谢谢!

最佳答案

不,但您可以在函数中检查它的返回值,并在出现问题时抛出异常。您也可以使用 json_last_error获取有关错误的详细信息

例子:

function my_json_encode($data) {
    if( json_encode($data) === false ) {
        throw new Exception( json_last_error() );
    }
}

try {
    my_json_encode($data);
}
catch(Exception $e ) {
    // do something
}

我确实发现非常烦人的是,要获得实际的错误消息,您必须检查从 json_last_error() 返回的常量列表。过去我使用 switch/case 语句来实现这一点,但您可以根据错误抛出不同的异常。

关于php - json_encode 可以触发 catch block 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12265830/

相关文章:

json - 在 Play for Scala 中将异构列表与 Json 相互转换

javascript - 根据 $_GET 显示/隐藏 Div

php - 统计并检查json查询结果

jquery - $.each() 与嵌套数组

javascript - 使用 AJAX 自动更新

java - 小写枚举 Gson

json - 表达 bodyParser 失败我的 json

php - md5 和 hash 的问题

php - 如何将PHP GD生成的图片转换成PDF

php - 如何使用 View 在 php 中回显当前 Laravel 版本的版本?