You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用HTTP:retry获取JSON格式异常,如何正确清理以正常访问?

解决JSON格式异常无法解析的问题

我来帮你搞定这个头疼的JSON解析问题!从你给出的清理后文本来看,最核心的问题是首尾的b"""和"""标识——这些不属于JSON的合法语法,才是导致->json()返回null的关键,之前只清理换行自然效果有限。

下面是具体的解决步骤和代码示例(假设你用的是Laravel的HTTP客户端,类似逻辑也适用于其他PHP HTTP库):

步骤1:移除首尾的非法标识

首先要把包裹JSON的b"""开头和"""结尾彻底去掉,有两种简单方法:

方法A:使用trim精准去除

如果首尾只有b"""、"""以及可能的空格,直接用trim更高效:

$rawBody = $response->body();
// 移除首尾的b"""、"""和空格
$cleanedBody = trim($rawBody, 'b""" ');

方法B:用正则匹配替换(更灵活,适配可能的格式变化)

如果标识周围有其他不确定的字符,用正则捕获中间的JSON内容:

$rawBody = $response->body();
// 匹配开头的b""",捕获中间所有内容,直到结尾的"""
$cleanedBody = preg_replace('/^b"""\s*(.*?)\s*"""$/s', '$1', $rawBody);

步骤2:清理残留的无效字符(可选)

如果还有残留的换行、制表符等,可以再做一次清理:

$cleanedBody = preg_replace('/[\r\n\t]/', '', $cleanedBody);

步骤3:解析并验证JSON

现在就可以正常解析了,还可以用json_last_error_msg()排查可能的残留问题:

$data = json_decode($cleanedBody, true);

if (json_last_error() === JSON_ERROR_NONE) {
    // 正常访问数据,比如打印设备名称
    dd($data['devname']); // 会输出 "Event Telt"
} else {
    // 查看具体解析错误,方便进一步排查
    dd(json_last_error_msg());
}

如果是用Laravel的HTTP客户端,不需要特意调用->json(),直接解析清理后的字符串就能得到可访问的数组/对象。

为什么之前的清理没效果?

你之前只清理了换行符,但JSON解析器遇到开头的b"""就直接判定为非法格式了,根本不会继续解析后面的内容。所以先处理外层的非法标识才是关键。

内容的提问来源于stack exchange,提问作者Oscar Sortland Kolsrud

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 15:17:30