2015-06-23 2 views
1

Я пытаюсь прочитать некоторые значения из объекта JSON и использовать их для заполнения html-шаблона. Кажется, я могу понять правильный синтаксис для чтения из файла JSON. Например, когда я хочу прочитать в «роли» первого объекта, я пишу:Чтение из объекта JSON с помощью синтаксиса Javascript

console.log("first object: "+ ((obj[0].roles)[0]).name) 

Вышеперечисленные работы и возвращает «первый объект: вещь прокомментировал».

Тогда, когда я пытаюсь прочитать текст глагола под «srcLanguageSentence» в рамках первого объекта, я пишу:

console.log("first verb: "+ ((obj[0].srcLanguageSentence.verb[2]).text) 

я ожидал увидеть «первый глагол: комментарий», но это не произойдет , Где мой синтаксис неправильно здесь Пожалуйста, смотрите фрагмент объекта файла JSON ниже:?

[ 
    { 
    "description": "", 
    "roles": [ 
     { 
     "name": "thing commented on" 
     }, 
     { 
     "name": "commentor" 
     } 
    ], 
    "srcLanguageSentence": { 
     "roles": [ 
     { 
      "beginOffset": 23, 
      "endOffset": 30, 
      "name": "thing commented on", 
      "text": "on them" 
     }, 
     { 
      "beginOffset": 5, 
      "endOffset": 7, 
      "name": "commentor", 
      "text": "We" 
     } 
     ], 
     "text": " `` We wo n't comment on them . '' ", 
     "verb": { 
     "beginOffset": 15, 
     "endOffset": 22, 
     "text": "comment" 
     } 
    }, 
    "tgtLanguageSentences": [ 
     { 
     "roles": [ 
      { 
      "beginOffset": 1, 
      "endOffset": 31, 
      "name": "thing commented on", 
      "text": "Weitere Aspekte der Kommission" 
      }, 
      { 
      "beginOffset": 44, 
      "endOffset": 47, 
      "name": "commentor", 
      "text": "ich" 
      }, 
      { 
      "beginOffset": 48, 
      "endOffset": 55, 
      "name": "negation", 
      "text": "nicht ." 
      } 
     ], 
     "text": " Weitere Aspekte der Kommission kommentiere ich nicht . ", 
     "verb": { 
      "beginOffset": -1, 
      "endOffset": -1, 
      "sense": "COMMENT, intransitive", 
      "text": "kommentieren" 
     } 
     } 
    ], 
    "verb": "KOMMENTIEREN" 
    }, 
] 
+0

Нет obj [0] .srcLanguageSentence.verb [2] – wernersbacher

+0

Если вы посмотрите на этот '' глагол ": {" beginOffset ": 15," endOffset ": 22," text ":" comment "}' , какое значение вы ожидали от 'verb [2]' для доступа? –

ответ

4

Использование:

console.log("first verb: "+ obj[0].srcLanguageSentence.verb.text) 

Вместо:

console.log("first verb: "+ ((obj[0].srcLanguageSentence.verb[2]).text) 

В общем, вам нужно используйте знак скобки [] при доступе к массиву и точечной нотации (.something) при доступе к объекту объекта. В JSON массив указывается [], а объект обозначается {}. Эти два простых правила позволяют легко понять, как получить доступ к вложенным значениям, которые обычно видны в сложных объектах JSON.

Обратите внимание, что на практике вы можете использовать обозначение скобки при доступе к объекту. Например, у нас есть этот объект:

var obj = { x: 10 };

я могу сделать console.log(obj['x']) или console.log(obj.x) и либо будет работать. Это позволяет программно обращаться к объекту. Скажем так:

var obj = { 
x: 10, 
y: 30, 
z: -2 
}; 

Object.keys(obj).forEach(function(key) { 
console.log(obj[key]); 
}); 

Там мы перебираем ключей (['x', 'y', 'z']), а затем можно использовать кронштейн обозначения для доступа к значениям. Мы не можем сделать obj.key, потому что это будет искать key в объекте - не значение key.

+0

Это называется ** скобкой нотации **, и вы можете использовать как для массивов, так и для объектов (потому что массивы - это просто объекты). Используйте точечную нотацию, но вы не всегда можете. –

+0

@FelixKling True - я думаю, что этот вопрос указывает, что это будущее. – Cymen

+0

@FelixKling Но я отредактирую. – Cymen

0

console.log("first verb: "+ ((obj[0].srcLanguageSentence.verb[2]).text) должно быть:

console.log("first verb: "+ obj[0].srcLanguageSentence.verb.sense.text.split(', ')[0].toLowerCase()); 

Это если ваш желаемый выход first verb: comment.

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