【问题标题】:JSON array returns undefined unless presented as a var in javascriptJSON 数组返回未定义,除非在 javascript 中显示为 var
【发布时间】:2026-01-04 12:40:02
【问题描述】:

我知道有很多这样的问题,但没有一个与我遇到的问题相匹配。

我正在尝试解析从我的 php 传递的 JSON 数组,我可以访问 JSON 数组,但只能在顶层访问。之后我得到一个未定义的错误。

调查数据 JSON

{test: "{"title":"test","data":{"questions":{"test":{"name":"test","type":"text","options":",,"}}}}", The New Survey: "{"title":"The New Survey","data":{"questions":{"te…":{"name":"test","type":"text","options":",,"}}}}"}

这是我的 JS 代码

var survey_data = <?php echo json_encode($survey_data); ?>;
    $(document).on( "click", ".view", function() {
       var survey_name = $(this).closest('tr').find(".quest-name-list").text();
       console.log(survey_data[survey_name]['title']);
    }); 

如果我运行 console.log(survey_data[survey_name]); 我会得到 JSON

{"title":"test","data":{"questions":{"test":{"name":"test","type":"text","options":",,"}}}}

但是上面的console.log(survey_data[survey_name]['title']);返回未定义

如果我运行下面的代码,虽然它可以工作

var json = {"title":"test","data":{"questions":{"test":{"name":"test","type":"text","options":",,"}}}};
console.log(survey_data[survey_name]['title']);

这将返回所需的 JSON 字段,但我不知道为什么。

感谢任何帮助!

编辑:感谢所有帮助我解决问题的人,这是问题并修复。

在我的 php 代码中,我有

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

但是我添加到数组中的字段($survey_fi) 已经是 JSON,所以我需要先解码 JSON,然后在我的 JS 代码中添加将转换回 JSON 的数组。

这就是解决办法

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

【问题讨论】:

  • 如果没有更多的上下文,任何人都很难提供帮助。您发布的代码本身就可以正常工作。
  • survey_data的完整内容是什么?
  • @PatrickQ 我已经编辑了我的答案以包含survey_data的内容
  • @Top-Bot 您添加到问题中的 json 看起来无效
  • 是的,那是不是 JSON

标签: javascript php jquery arrays json


【解决方案1】:

我认为survey_data[survey_name] 是 JSON 字符串,字符串不会有任何 title 属性,因此请在尝试获取该属性之前对其进行解析。

console.log(JSON.parse(survey_data[survey_name])['title']);

【讨论】:

  • 这没有意义
  • survey_name 似乎不包含 json
  • 你为什么这么认为,有趣?
  • @dfsq : 混淆黑白变量名
  • @FedericoklezCulloca 你是对的,看看我更新的答案。