【问题标题】:How to retrieve an object inside an object in EJS如何在 EJS 中检索对象内部的对象
【发布时间】:2016-06-17 00:31:26
【问题描述】:

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

<%= person['person_details']%>

检索 JSON 的该部分。这将返回 [Object Object]。我想要做的是检索 JSON 的信息部分中的所有内容 a.k.a:“jim”“bob”“true”和“两个人走进酒吧,一个人说:哇!”。一些 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"
    }
},

【问题讨论】:

  • &lt;%= person['person_details']['info']['name']%&gt; // Jim?等等……
  • @Marcus 'code ' 有效并返回一个 [Object Object] 但是... 'code' 返回错误
  • 它返回什么错误
  • @Marcus Ahh 它返回的错误是因为并非每个人在 JSON 中都有相同的顺序。有些人只有名字,有些人有电子邮件等......所以它返回一个错误,因为它无法从所有对象中专门提取名称,因为我使用的是 .forEach

标签: javascript json ejs


【解决方案1】:

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

例如:

<% 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>
<% }); %>

在本例中,您动态查找 info 键的名称并将其设置为 infoKey 变量。从那里你可以使用它作为访问器。

【讨论】:

  • 如何设置键值?
  • 请详细说明一下?你的问题有点模棱两可。由于您的数据来自data1,因此您无需在案例中设置任何内容。
  • 啊,我明白了,很抱歉,我的想法不正确。如果你不介意,再问一个问题。假设 JSON 的“信息”部分更改为“信息”。这还能用吗?我将编辑我的代码底部并添加另一个示例供您查看。
  • 这行不通......但很容易调整到工作。只需将info 的两个实例都更改为您的新密钥。在你的情况下information。当然……当你更新帖子时告诉我。
  • 刚刚更新了我的代码,查看底部的示例 3。
猜你喜欢
  • 2017-05-18
  • 1970-01-01
  • 2017-11-13
  • 2021-05-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-15
  • 2022-01-12
相关资源
最近更新 更多