2016-06-16 2 views
1

Я пытаюсь получить раздел «информация» JSON ниже. Как вы можете видеть в моем коде, я используюКак получить объект внутри объекта в EJS

<%= person['person_details']%> 

, чтобы получить этот раздел JSON. Это возвращает [Объект объекта]. То, что я хочу сделать, - это получить все в разделе информации 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": "[email protected]", 
     "lastName": "tim", 
     "isMale": true, 
     "momMaidenName": "felicia" 
    } 
}, 
//EXAMPLE 3 (info changes to information) 
"person_details": { 
    "information": { 
     "email": "[email protected]", 
     "lastName": "tim", 
     "isMale": true, 
     "momMaidenName": "felicia" 
    } 
}, 
+0

'<% = person ['person_details'] ['info'] ['name']%> ​​// Jim'? И так далее ... – Marcus

+0

Код @Marcus <% = person ['person_details'] ['info']%> 'работает и возвращает объект [Object Object], но ... ' code <% = person ['person_details '] [' info '] [' name ']%>' возвращает ошибку – AnonUser

+0

Какая * ошибка * возвращается? – Marcus

ответ

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

В этом примере вы динамически найти имя информационного ключа и установить его в infoKey вар. Оттуда вы используете это как аксессор.

+0

Как установить значение ключа? – AnonUser

+0

Ухаживать за подробностями, пожалуйста? Ваш вопрос немного неоднозначен. Вам не нужно ничего устанавливать в вашем случае, так как ваши данные поступают из 'data1'. – Seth

+0

Ahhh Я вижу, извините, что не думал правильно. Еще один вопрос, если вы не возражаете. Допустим, что «информация» части JSON меняется на «информацию». Будет ли это работать? Я собираюсь изменить нижнюю часть моего кода и добавить еще один пример для вас, чтобы посмотреть. – AnonUser

Смежные вопросы