如何在EJS中检索对象内的对象

时间:2016-06-16 13:41:05

标签: javascript json ejs

我正在尝试检索下面JSON的“信息”部分。正如您在我的代码中看到的,我使用

<%= person['person_details']%>

检索JSON的那一部分。这将返回[Object Object]。我想要做的是检索JSON a.k.a的信息部分中的所有内容:“jim”“bob”“true”和“两个人走进酒吧,一个人说:ow!”。一些JSON没有相同的字段(我在下面添加了另一个例子)。我试过......

<%= person['person_details'][0][1]%>

但是这会给出错误。如果我删除了[1],它会在我的下拉菜单中返回一个空数量。

<div class="personForm">
    <form>
        Select Parameters
        <select id="personIdList">
            <% data1.forEach(function(person) {%>
            <option><%= person['person_details']%>
            <% }); %></option>
        </select>
    </form>
</div>


//JSON THAT IM ATTEMPTING TO EXTRACT
"person_details": {
    "info": {
        "name": "Jim",
        "lastName": "Bob",
        "isMale": true,
        "favJoke": "Two guys walk into a bar, one says: ow!"
    }
},
//EXAMPLE 2
"person_details": {
    "info": {
        "email": "bobsmit@gmail.com",
        "lastName": "tim",
        "isMale": true,
        "momMaidenName": "felicia"
    }
},
//EXAMPLE 3 (info changes to information)
"person_details": {
    "information": {
        "email": "bobsmit@gmail.com",
        "lastName": "tim",
        "isMale": true,
        "momMaidenName": "felicia"
    }
},

1 个答案:

答案 0 :(得分:1)

您需要遍历每个人各自的person_details的密钥。从那里你将使用键值ass访问器。

例如:

<% data1.forEach(function(person) {%>
   <option>
     <% Object.keys(person.person_details.info).forEach(function(key) { %>
       <%= person.person_details.info[key] %>
     <% }); %>
  </option>
<% }); %>

这是一种动态方法,可以使用info哈希中的任何一组键/值。

如果您的person_details信息哈希值包含不同的名称,您可以在循环中对其进行修补(尽管我建议您将数据标准化并使用第一个示例)。

<% data1.forEach(function(person) {%>
   <% var infoKey = infoKey = Object.keys(person.person_details)[0]; %>
   <option>
     <% Object.keys(person.person_details[infoKey]).forEach(function(key) { %>
       <%= person.person_details[infoKey][key] %>
     <% }); %>
  </option>
<% }); %>

在此示例中,您可以动态查找信息密钥的名称并将其设置为infoKey var。从那里你可以使用它作为访问者。