Jquery 如何访问JS中的嵌套JSON?

Jquery 如何访问JS中的嵌套JSON?,jquery,json,getjson,Jquery,Json,Getjson,我已经成功地将这个JSON结构传递到JS中: { "StepOne": [ { "id": "2", "type": "1", "description": "How are you feeling?", "options": [ { "opt_id": "1", "opt_desc": "Good" },

我已经成功地将这个JSON结构传递到JS中:

{
"StepOne": [
    {
        "id": "2",
        "type": "1",
        "description": "How are you feeling?",
        "options": [
            {
                "opt_id": "1",
                "opt_desc": "Good"
            },
            {
                "opt_id": "2",
                "opt_desc": "Perfect"
            },
            .... etc
它一直持续到第五页,每个步骤的问题数量从1到4个不等,每个问题的选项从空到大约10个不等。我想使用这些信息在Javascript中生成一个多步骤表单,但我不知道如何访问内部数据。我只能找到“第一页”、“第二页”等。我正在使用以下代码来实现这一点:

$(document).ready(function()
    {       
        $('#show-results').click(function() 
        {
            $.post('json.php', function(data) 
            {
                var pushedData = jQuery.parseJSON(data);


                $.each(pushedData, function(i, serverData)
                {
                    alert(i);
                })
            })
        })
    });
现在,我尝试了以下函数来获取内部值:

var desc = pushedData.PageOne.description;

var desc = pushedData['PageOne']['Description'];
在每个循环中我都试过类似的东西

var desc = PageOne.description;

var desc = PageOne['description'];
这一切都是未定义的。有没有一种方法可以像我迭代页面一样迭代每个页面中的每个问题?然后冲洗并重复一遍,重复每个问题的选项?如果我可以访问每一个级别,我应该可以动态生成投票,这是这里的最终目标

我想这段代码是有意义的(在我发布后发现的)。不过不太管用

$(document).ready(function()
    {       
        $('#show-results').click(function() 
        {
            $.post('JSAAN.php', function(data) 
            {
                var pushedData = jQuery.parseJSON(data);

                $.each(pushedData, function(i, stepData)
                {
                    $.each(stepData, function(j, questionData)
                    {
                      // Print question here
                           $.each(questionData, function(k, optionData)
                           {
                                // Print option here
                           })

                    })
                })
            })
        })
    });

除了第一步!==第一页问题:

StepOne是一个数组,它包含一个对象

这对我来说毫无意义,因为第一步可能只有一步。。。 …但那只是我

所以你必须去:

jsonData.StepOne[0].description;
jsonData.StepOne[0].options[0].opt_desc;
jsonData.StepOne[0].options[1].opt_desc;
等等…

它需要

jsonData.StepOne[0].description
因为您有一个额外的
[]
数组包装器

根据您的结构,只需省略附加的
[]
,然后您就可以直接访问所有对象属性,它应该如下所示:

{
"StepOne":
    {
        properties
    },
"StepTwo":
    {
        properties
    }
}
但是,有这样一个结构是可以的——现在您必须编写
StepOne[x].prop

"StepOne":[
    {
        properties
    },
    {
        other props
    }],
 "StepTwo":[{...
根据你发布的代码,这可能是你想要的,因为你每一步都有几个问题(?)

简单循环如下所示:

for (var key in o) {
  if (o.hasOwnProperty(key)) {
    console.log(key + " -> " + o[key]);
  }
}
但嵌套循环更为复杂:

function loop(obj) {
    $.each(obj, function(key, val) {
        if($.isPlainObject(val) || $.isArray(val)) {

            console.log(key + " is an Object");
            // object or array -> call recursively
            loop(val);

        } else {
           // plain value
           console.log(key + "->" + val);
        }
    });
}

看看

您正试图访问
PageOne
,但您的示例有
StepOne
。。。这就是问题所在吗?你确定pushedData包含正确的JavaScript对象吗?噢,哈哈,对不起@jamesalardice:)噢,对不起,是的。我更改了这个示例的变量名,因为我发现它通常被命名为多步骤而不是多页。但这不是问题所在。我的bad@Sllix很抱歉标签放错了位置:)谢谢你的纠正。只是每个步骤都有几个问题,所以我必须找到一种方法将问题链接到每个步骤。在这种情况下,您可能会考虑编写一个伪函数的函数:“对于每一步,对于步骤中的每个问题:CurrnEngQuest=步[i];对于CurrnEngEnter问题中的每个选项,CurrutyOpjt= CurrnthQuasy[j]:WrreEnListByTys/WrreEnter复选框(CurrutyType选项)).在现实生活中,它可能会更复杂一些,我个人会在其中进行一些递归,以减少生活的痛苦,但如果你想想每个“节点”是什么“在树表示中,编写函数来处理它们变得更容易了。我确实使用了递归,正如上面的答案显示的那样,只是努力跟踪我的计数变量。关于如何使用某种foreach或while(counterlevel++:“+key+”
”);}:)}知道为什么第一个有效,而第二个无效吗?当然,
id
是一片叶子,这就是为什么在检查if分支时执行else分支的原因,我猜?哦,天哪,我现在觉得自己很愚蠢。当然是那个lol。这是我第三次尝试做这个该死的民意调查,前两次都没有达到预期效果,所以现在我很容易失明。谢谢。让我一天都很愉快