递归循环遍历JSON数据

时间:2014-01-19 05:28:11

标签: javascript php jquery json

我在jsfiddle的帮助下创建了post。递归循环使用JSON原始数据,但在从PHP数组中读取JSON数据时不起作用。

var notes = '<?php echo json_encode($notes); ?>';

console.log(notes); // displays JSON raw data (used in jsfiddle)

在遍历数据之后,我希望根据类型获得特定输出:主题,主题,副主题,概念,段落。

如何解决此问题?

2 个答案:

答案 0 :(得分:3)

删除引号:var notes = <?php echo json_encode($notes); ?>;

引号使它成为一个字符串,而不是一个对象。

如果你想把它写成一个字符串,那么你需要将它从字符串转换为JSON:

var notes = JSON.parse('<?php echo json_encode($notes); ?>');

要访问for循环中的对象属性,请执行以下操作:

for (var key in myObj) {
  console.log(myObj[key]);
}

您可以使用点表示法或括号表示法访问对象属性。点符号通常被认为更清洁,但它更有限。考虑这个对象:

var myObj = {
  foo : "some value",
  bar : "some other value",
  "1&^@" : "this value's key is invalid!"
};

要访问具有有效javascript变量名称的键的属性,可以使用这样的点表示法:

console.log(myObj.foo); //"some value"
console.log(myObj.bar); //"some other value"

第三个属性不会以这种方式工作。由于它包含其他无效字符,因此必须将其创建为字符串,并且必须以字符串形式访问,因此请使用括号表示法:

console.log(myObj['1&^@']);

支架表示法的另一个好处是你可以使用变量作为键名。 (另见上面的for循环)。

var foo = 'bar';

var myObj = {
  bar : 123
};

console.log(myObj[foo]); //123

这是有效的,因为foo的值为'bar',因此myObj[foo]相当于myObj['bar']myObj.bar

答案 1 :(得分:0)

在@ m59的帮助下,我设法迭代JSON数据并获取特定数据。这是jsfiddle

if (obj['type'] == 'Subject') {
     body += 'SubjectId:' + obj['id'] + '<br>';
     body += 'SubjectContent:' + obj['content'] + '<br>';

     var topics = obj['children'];
     var topic;
     for (topic in topics) {
         body += 'topicId:' + topics[topic]['id'] + '<br>';
         body += 'topicContent:' + topics[topic]['content'] + '<br>';
         body += 'topicType:' + topics[topic]['type'] + '<br>';
     }
}