从嵌套数组中获取json数据

时间:2013-07-12 09:51:03

标签: javascript json api nested

我在围绕一些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)

让我知道你们的想法!

3 个答案:

答案 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;

希望它能正常工作。