所以我有这个JSON struture,我已成功传入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
它一直持续到PageFive,每个步骤的问题数量从1-4变化,每个问题的选项从空变为大约10。我想使用这些信息在Javascript中生成一个多步骤表单,但我无法弄清楚如何访问内部数据。我只能找到“PageOne”,“PageTwo”等。我使用以下代码来做到这一点:
$(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
})
})
})
})
})
});
答案 0 :(得分:2)
需要
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);
}
});
}
查看 this example 。
答案 1 :(得分:1)
除了StepOne!== PageOne问题:
StepOne是一个数组,它包含一个对象。
这对我来说毫无意义,因为在StepOne中可能只有一步...... ......但那只是我。
所以你必须去:
jsonData.StepOne[0].description;
jsonData.StepOne[0].options[0].opt_desc;
jsonData.StepOne[0].options[1].opt_desc;
等等......