【问题标题】:How to json encode result from object response?如何对来自对象响应的结果进行 json 编码?
【发布时间】:2025-11-30 19:20:21
【问题描述】:

我想从 PHP API 处理器脚本发回 JSON。对于错误消息,我像这样访问它:

try {
    $tax = $client->taxForOrder([
    "field"=>($value),
    "field"=>($value),
    //etc
);
$data = $tax;
//json encoding works here
echo json_encode($data);
}
catch (TaxJar\Exception $e) {
    // 406 Not Acceptable – transaction_id is missing
    echo $e->getMessage();
    // 406
    echo $e->getStatusCode();
}

通过上述内容,它按预期返回纯文本“400 Bad Request – to_zip 66762 is not used within to_state NJ400”。但我想要 JSON,因为 jQuery $.ajax 成功函数正在寻找“JSON”的数据类型。 当我尝试时:

   $msg = $e->getMessage();
   echo json_encode($msg);

它不返回任何东西。如何正确获得类似 {"error","msg":"400 Bad Request..."}

【问题讨论】:

    标签: php json


    【解决方案1】:

    您需要先构建一个 PHP 数组。

    
    $response = ['status' => 'error', 'msg' => $e->getMessage()];
    echo json_encode($response );
    
    

    当您将错误发送给客户端时,必须安全地完成异常管理。我的意思是,根据您处理异常的方式,您可能会将调试信息放在异常消息中。这可能会将信息提供给潜在的黑客。

    也许创建一个新的异常类,如 ClientErrorException 类。并且仅当该类异常时才向客户端发送异常消息。如果没有,只需发送一条通用消息“发生内部服务器错误”

    【讨论】:

    • 谢谢 - 我不确定如何正确构建阵列,这回答了它。如何在响应中将“\u2013”​​转换为“–”?在我从他们的 API 访问类的这种情况下,您将如何创建另一个新的异常类?
    • 我会创建一个 ClientErrorException 类。默认情况下,异常代码为 400。此代码将用于发送 HTTP 状态代码。根据错误类型,您可以指定更精确的代码。所有异常都将在我的应用程序的更高级别捕获,如果之前未捕获所有异常,我将在其中处理所有异常。如果外部类或 API 抛出异常,我可能会捕获并处理它,然后根据异常可能给我的信息,我会抛出 ClientErrorException 或让原始异常传播。
    • 关于字符编码问题(\u2013),可以看*.com/questions/22745662/…