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

Laravel 5.6视图打印JSON数据报错Illegal string offset 'rates'求解决

解决Laravel视图中"Illegal string offset 'rates'"错误

你的问题核心出在控制器对JSON数据的处理逻辑上,多做了一次完全不必要的json_encode操作,导致最终解析后的数据结构完全不符合预期。我来一步步帮你梳理修正:

错误原因拆解

你用file_get_contents获取到的$response_json已经是标准JSON格式的字符串了,但你紧接着调用了json_encode($response_json)——这会把原本的JSON字符串转义成一个普通的字符串(比如变成"{\"rates\":...}")。之后再执行json_decode,得到的其实还是原始的JSON文本,而非你期望的关联数组,所以当视图里尝试用['rates']访问时,就会触发"非法字符串偏移"的错误。

修正后的控制器代码

直接去掉多余的json_encode步骤,对API返回的JSON字符串直接解码即可:

$req_url = 'https://v3.exchangerate-api.com/bulk/6eea6e74c3abe1df9de390c2/USD';
// 获取API返回的JSON格式字符串
$response_json = file_get_contents($req_url);

// 直接解码为关联数组,无需提前编码
$final_data4 = json_decode($response_json, true);

// 可选:添加错误校验,避免API请求失败导致后续报错
if (json_last_error() !== JSON_ERROR_NONE) {
    abort(500, '解析汇率数据失败');
}

return view('clientlayout.main.registerdomain', compact('final_data4'));

同步修正视图代码

另外你的视图循环逻辑也有问题:$final_data4['rates']是一个关联数组(键为货币代码,值为对应汇率,比如['USD' => 1, 'EUR' => 0.92...])。你原来的{{$value['USD']}}会报错,因为$value是单纯的汇率数值,并非数组。

如果要遍历所有汇率,应该这样写:

@foreach($final_data4['rates'] as $currencyCode => $exchangeRate)
    货币:{{ $currencyCode }},汇率:{{ $exchangeRate }}<br>
@endforeach

如果只是想单独获取USD的汇率,根本不需要循环,直接输出即可:

USD汇率:{{ $final_data4['rates']['USD'] }}

生产环境优化建议

生产环境中尽量避免使用file_get_contents发送HTTP请求,推荐用Laravel 5.6已支持的Http客户端,它更健壮,还能便捷处理错误、超时等情况:

use Illuminate\Support\Facades\Http;

$response = Http::get('https://v3.exchangerate-api.com/bulk/6eea6e74c3abe1df9de390c2/USD');

if (!$response->successful()) {
    abort(500, '获取汇率数据失败');
}

$final_data4 = $response->json();
return view('clientlayout.main.registerdomain', compact('final_data4'));

内容的提问来源于stack exchange,提问作者sharmila

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:57:47