2017-04-19 79 views
1

我想從JS中聚合物中的JSON文件中讀取子數組,並返回要在dom-repeat中使用的子數組。但是,它告訴我該子數組是未定義的。我嘗試以各種方式重新構建JSON文件,但沒有運氣。我想我沒有在某處使用正確的語法。聚合JS從JSON文件讀取

眼下JSON看起來是這樣的:

{ 
     "url": "dn8", 
     "volpage": "DN iii 1", 
     "languages": [{ 
      "pt": { 
       "authors": ["Laera"], 
       "titlelan": "Title in Portuguese" 
      }, 
      "fr": { 
       "authors": ["Moi"], 
       "titlelan": "Title in French" 
      }, 
      "es": { 
       "authors": ["Jesus"] 
      } 
     }] 
} 

我試圖得到一個子陣列稱爲languageData剛剛保存特定數據的輸入語言。輸入值爲inputLanguage的正確值,例如「pt」。我的JS看起來像這樣:

Polymer({ 
     is: 'test-data', 
     properties: { 

     inputUrl: String, 
     inputLanguage: String, 
     inputData: { 
       type: Array, 
       notify: true, 
       value: function(){return []} 
     }, 

     languageData: { 
      type: Array, 
      computed: '_computeLanguage(inputData,inputLanguage)' 
     } 
     }, 
     _computeLanguage: function(inputData,inputLanguage) { 
     var lanarray = inputData.languages[inputLanguage]; 
     return lanarray ? lanarray : ""; 
     } 

    }); 

任何幫助非常感謝!

+0

你可以設置問題的在線例如,它會更容易幫助呢? 下面是如何做到這一點:http://plnkr.co/edit/k4B2H0whGXROcvXnbx9y?p=preview –

+0

也許嘗試:'var lanarray = inputData.0.languages [inputLanguage];' –

回答

1

正如你可以看到你的JSON的languages屬性不是Object而是Array

你的「高分子代碼」效果很好,問題是,你正在試圖獲得languageData就好像它是一個數組:

var lanarray = inputData.languages[inputLanguage]; 

其實,languages包含對象的數組,你不能以這種方式找到你的lang對象。

一個可能的解決辦法是:

var lanarray = inputData.languages[0][inputLanguage]; 
+0

感謝您的解釋。這真的有幫助,我現在可以看到我出錯的地方。 – Vims