我在围绕一些JSON的东西时遇到了一些麻烦。也就是说,我正在尝试从谷歌翻译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 :(得分:1)
这只是你必须用
解析它的文本JSON.parse(translated)
因此您可以使用translated.data
更新
您获得的错误意味着translated.data
未定义,您必须将解析分配给变量,否则它将永远不会工作,它不会就地修改它
var translated = JSON.parse(to_Translate.responseText);
答案 1 :(得分:0)
如此接近!
translated.data.translations[0].translatedText;
translations
是一个对象数组,您需要数组中第一个元素的translatedText
属性。
<强>更新强>:
只是为了确认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);
答案 2 :(得分:0)
是的,使用
translated.data.translations[0].translatedText;
希望它能正常工作。