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

PHP传递JSON数组至JS后无法访问深层字段问题求助

问题分析与解决方案

问题描述

你遇到的情况是:从PHP传递到JavaScript的survey_data中,只能访问顶层的键值对,但尝试访问深层字段(比如survey_data[survey_name]['title'])时返回undefined。通过console.log可以看到,survey_data[survey_name]是一个JSON格式的字符串,而不是可直接访问的JavaScript对象——但如果直接在JS里定义同样结构的对象,却能正常获取title字段。

原因分析

问题出在你的PHP代码处理逻辑上:
你原本是把base64解码后的JSON字符串直接存入了$survey_data数组,当执行json_encode($survey_data)时,这个JSON字符串会被当作普通字符串处理,最终在JS中得到的是一个包含嵌套JSON字符串的对象,而非嵌套的JSON对象。

举个直观的例子,原PHP处理后,json_encode生成的内容类似:

{
  "test": "{\"title\":\"test\",\"data\":{...}}",
  "The New Survey": "{\"title\":\"The New Survey\",\"data\":{...}}"
}

到了JS里,survey_data['test']就是一个字符串,你自然无法通过.或[]直接访问它的title属性。

修复方案

解决思路很简单:在PHP中,先把base64解码后的JSON字符串解析成PHP数组/对象,再存入$survey_data,这样json_encode时就能把它转换成嵌套的JSON对象,JS端就能直接访问深层字段了。

原错误PHP代码:

$survey_data = [];
foreach ($surveys as $survey) {
    $survey_fi = $survey['survey_fields'];
    $survey_data[ $survey_f['title']] = imap_base64($survey_fi);
}

修复后的PHP代码:

$survey_data = [];
foreach ($surveys as $survey) {
    $survey_fi = $survey['survey_fields'];
    // 先把base64解码后的JSON字符串解析为PHP关联数组
    $survey_f = json_decode(imap_base64($survey_fi), true);
    $survey_data[ $survey_f['title']] = $survey_f;
}

修复后,你的JavaScript代码不需要做任何修改,survey_data[survey_name]会变成一个可直接访问的对象,survey_data[survey_name]['title']就能正常返回对应的值了。

内容的提问来源于stack exchange,提问作者Top-Bot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:07:09