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

How to retrieve an object inside an object in EJS

我正在尝试检索下面 JSON 的 "info" 部分。正如您在我的代码中看到的那样,我使用

<%= person['person_details']%>

检索 JSON 的那一部分。这个returns[对象对象]。我想要做的是检索 JSON a.k.a 的信息部分中的所有内容:"jim" "bob" "true" 和 "Two guys walk into a bar, one says: 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"
    }
},

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

例如:

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

这是一种动态方法,适用于您的 info 哈希中的任何一组 key/values。

如果您的 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 变量。从那里您可以将其用作访问器。