2013-07-12 4 views
1

У меня проблемы с переносом головы вокруг некоторых вещей JSON. А именно, я пытаюсь получить строку из json-ответа, полученного от google translate api, который я запрашиваю.Получение данных json из вложенного массива

var translator = function() { 
    for (var i = 0; i < result.length; i++) 
    { 
    //Construct URI 
    var source = 
     'https://www.googleapis.com/language/translate/v2?' + 
     'key=MY-API-KEY-REMOVED-ON-PURPOSE&' + 
     'source=en&' + 
     'target=fr&' + 
     'q=' + 
     result[i][1]; //looping over an array, no problem there 



     //Receive response from server 
    var to_Translate =new XMLHttpRequest(); 
    to_Translate.open("GET",source,false); 
    to_Translate.send(); 
    var translated = to_Translate.responseText; 

    JSON.parse(translated); 
    translated = translated.data.translations[0].translatedText; 

    console.log(translated); 


    } 
}; 


translator(); 

Где

console.log(translated); 

дает

{ 
"data": { 
    "translations": [ 
    { 
    "translatedText": "some stuff that's been translated" 
    } 
    ] 
} 
} 

Мой вопрос: как я могу получить доступ к значению translatedText? Я пробовал:

translated.data.translations[0].translatedText; 

Но он не работает. Когда я console.log, я получаю

Uncaught TypeError: Cannot read property 'translations' of undefined 
    translator 
(anonymous function) 

Дайте мне знать, что вы, ребята, думаете!

+0

Ребята Я только что редактировал мой вопрос. Я добавил предложения ваших парней, но у меня все еще есть небольшая проблема ... – Max

+0

Я отредактировал свой ответ, теперь вы должны получить правильный результат. –

ответ

1

Это просто текст вы должны проанализировать его с помощью

JSON.parse(translated) 

, чтобы вы могли получить доступ к нему, например, translated.data

UPDATE

ошибка вы получаете средства, которые translated.data является неопределенным, вы должны назначить разобрана на переменную, в противном случае он никогда не будет работать , она не изменяет его на месте

var translated = JSON.parse(to_Translate.responseText); 
+0

Спасибо, Альберто! Я использовал ваше предложение, но я все еще получаю сообщение об ошибке в консоли. Есть идеи? Спасибо! – Max

+0

Он работает как шарм, огромное спасибо! Я на 2-х репутационных очках не могу ответить на вопрос ... Но я мог бы, если бы поднял мой вопрос. Извините за торги ха-ха! В любом случае, спасибо вам, альберто! – Max

+0

heheh не проблема, вы должны быть в состоянии принять: P –

0

Так близко!

translated.data.translations[0].translatedText; 

translations представляет собой массив объектов, и вы хотите translatedText свойства первого элемента в массиве.

UPDATE:

Просто, чтобы подтвердить вывод to_Translate.responseText это строка, содержащая:

{ 
"data": { 
    "translations": [ 
    { 
    "translatedText": "some stuff that's been translated" 
    } 
    ] 
} 
} 

Таким образом, вы должны быть в состоянии сделать:

var translated = to_Translate.responseText, 
    parsed = JSON.parse(translated), 
    text = parsed.data.translations[0].translatedText; 

console.log(text); 
+0

Эй, ты совершенно прав. Я тоже пробовал это, но у меня была ошибка консоли, которую я только что загрузил в свой вопрос. Есть идеи? Большое спасибо – Max

0

Да, используйте translated.data.translations[0].translatedText;

Надеюсь, что все будет хорошо.

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