未捕获的SyntaxError,jade中for循环中的意外标识符

时间:2014-07-12 21:07:09

标签: json node.js for-loop express pug

我正在尝试使用一些动态内容渲染玉石。我正在读玉器的json。 我的json看起来像这样

{ data1: 'data1',
  data2: 'data2',
  data3: 
 [ { name: 'ABC',
   address: 'India'
   },
   { name: 'DEF',
   address: 'Australia'
   }]}

我正在尝试渲染玉石并使用上面json的数据 我的玉看起来像

  var data1 = #{data1};
  var data2 = #{data2};
  var size = #{data3.length};
  for data in #{data3}
    var name = data.name;
    var address = data.address;

我能够正确地提取上面提到的前3行中的数据。但是当我尝试从循环中获取数据时,我得到了#34; Uncaught SyntaXError,Unexpected Identifier"调试时出错。 如果我把一条线放在for循环之外,它可以正常工作。实施例

 var name = #{data3[0].name};

正确呈现。但我需要遍历一个循环并在那里获取数据。有人可以帮忙。 感谢

使用更多信息进行更新 1.我在运行节点服务器的地方创建了一个json -

 var json_string = "{"data1":"data1","data2":"data2","data3":[{"name":"ABC","address":"India"},{"name":"DEF","address":"Australia"}]};";
 var json_data = JSON.parse(json_string);
 console.log(json_data);
 res.render('sample_example', json_data);
  1. 在我的sample_example.jade中,我在脚本

    中有以下代码段
      var data1 = #{data1};
      var data2 = #{data2};
      var size = #{data3.length};
      for data in #{data3}
        var name = data.name;
        var address = data.address;
    
  2. 如前所述,我能够正确地将#{data1},#{data2},#{data3.length}提取到变量中。但它在for循环中打破了。实际上,我能够从for循环外部提取#{data3 [0] .name}。但是在for looop中它给出了规定的错误。

2 个答案:

答案 0 :(得分:1)

现在就是这样做的。

在服务器端,您必须JSON.stringify对象数组。

var json_data = JSON.parse(json_string);

// Convert back to json only the property data3
json_data.data3 = JSON.stringify(json_data.data3);
res.render('simple', json_data);

或者更好的是不解析JSON只是按照它的方式进行:

// var json_data = JSON.parse(json_string);
res.render('simple', {
  json_data: json_string
});

在玉器模板中(如果你遵循更好的方法):

script(type='text/javascript').
  var json_data = !{json_data};
  var data1 = json_data.data1;
  var data2 = json_data.data2;
  var data3 = json_data.data3;
  var size = data3.length;

  data3.forEach(function(data) {
    var name = data.name;
    var address = data.address;
    console.log(name, address);
  });

您还需要更改循环结构。 for..in用于迭代对象而不是对象数组。

答案 1 :(得分:0)

这对我有用;

- var cdata = {"data1":"data1","data2":"data2","data3":[{"name":"ABC","address":"India"},{"name":"DEF","address":"Australia"}]};
each data in cdata.data3
  - var name = data.name;
  - var address = data.address;
  p Name: #{name}
  p Address: #{address}

如果更新上面显示的代码不起作用,您可以共享实际的玉文件内容吗?还有什么版本的玉和快递?