在EJS中循环访问JSON

时间:2014-04-09 03:07:56

标签: node.js ejs

我在下面的EJS中有代码,

<script>
    var row =<%-JSON.stringify(data)%>
    console.log(row);
</script>
<% for(var i=0; i<JSON.stringify(data).length; i++) {%>
   <tr>
     <td>
       <%= JSON.stringify(data)[i].id%>
     </td>
   </tr>
<% } %>

行的输出是正确的,一个包含3个对象的数组,每个对象都有属性id,名称等。我可以操纵行来在JS中弹出表。但是,我想知道是否有办法让它以上述方式完成?

当我运行上面的代码时,JSON.stringify(data).length不是3,而是整个字符串的长度。

另一个问题是当我尝试添加

&lt;%alert(&#39; t&#39;); %GT;或&lt;%window.alert(&#39; t&#39;); %&gt;,它让我没有定义&#39;错误...

帮助表示赞赏。

此致 锤

4 个答案:

答案 0 :(得分:68)

JSON.stringify返回String。所以,例如:

var data = [
    { id: 1, name: "bob" },
    { id: 2, name: "john" },
    { id: 3, name: "jake" },
];

JSON.stringify(data)

将返回相当于:

"[{\"id\":1,\"name\":\"bob\"},{\"id\":2,\"name\":\"john\"},{\"id\":3,\"name\":\"jake\"}]"

作为String值。

所以当你有

<% for(var i=0; i<JSON.stringify(data).length; i++) {%>

最终看起来像是:

<% for(var i=0; i<"[{\"id\":1,\"name\":\"bob\"},{\"id\":2,\"name\":\"john\"},{\"id\":3,\"name\":\"jake\"}]".length; i++) {%>

可能你想要什么。你可能想要的是这样的:

<table>
<% for(var i=0; i < data.length; i++) { %>
   <tr>
     <td><%= data[i].id %></td>
     <td><%= data[i].name %></td>
   </tr>
<% } %>
</table>

这将输出下表(使用上面的示例data):

<table>
  <tr>
    <td>1</td>
    <td>bob</td>
  </tr>
  <tr>
    <td>2</td>
    <td>john</td>
  </tr>
  <tr>
    <td>3</td>
    <td>jake</td>
  </tr>
</table>

答案 1 :(得分:1)

就我而言,datas是数组的对象,有关更多信息,请Click Here

<% for(let [index,data] of datas.entries() || []){  %>
 Index : <%=index%>
 Data : <%=data%>
<%} %>

答案 2 :(得分:0)

JSON.stringify(data).length返回字符串长度而不是对象长度,可以使用Object.keys。

<% for(var i=0; i < Object.keys(data).length ; i++) {%>

https://stackoverflow.com/a/14379528/3224296

答案 3 :(得分:0)

我在选择上创建动态选项的方法是:

<optgroup label="Select Table">
    <% for(var i=0; i<doctors.length; i++) {%>
        <% fullname = doctors[i].surname + doctors[i].name %>
        <option name="doctor" value=" <%= fullname%> "><%= fullname%></option>
    <% } %>
</optgroup>

我已经发送了响应中的数据,我只是使用 for 循环对其进行迭代。