2016-07-06 74 views
2

我當時正在關注這篇文章(https://www.visualstudio.com/docs/integrate/extensions/develop/add-dashboard-widget)以創建一個小組件,將它添加到Microsoft dashboard中。在.json文件中訪問字段

在我的HTML文件中,有這樣一段代碼,我不能去上班:

...(some code above) 
return TFS_Wit_WebApi.getClient().getRevision(284,6) 
         .then(function (query) { 

          var $list = query.rev;   
          var $container = $('#query-info-container'); 
          $container.empty(); 
          $container.append($list); 

... (some code below) 

在這一行:

var $list = query.rev; 

我試圖以訪問以.json文件「rev」變量。

這是我以.json文件

{ 
     "count": 15, 
     "value": 
     [ 
     { 
      "id": 284, 
      "rev": 1, 
      "fields": { 
      "System.WorkItemType": "User Story", 
      "System.State": "New", 
      "System.Reason": "New", 
      "System.CreatedDate": "2016-06-23T14:31:37.567Z", 
     }, 

...(some code below) 

而且我能夠獲得上網本「轉」變量。

不過,現在我想獲得 「田」,即

"System.State": "New", 

而不是

var $list = query.rev; 

我試圖

var $list = query.fields.System.WorkItemType[0]; 
And 
var $list = query.value.fields[0]; 
and 
var $list = query.fields; 

然而,沒有工作。

這裏是它應該是怎樣的一些文件被訪問

fields: {[key: string]: any}. 

但它沒有太大的幫助。

任何幫助將不勝感激! 謝謝!

回答

1

您可以使用JSON對象作爲一種「映射」,這意味着它們由鍵值對組成。

var $list = query.fields['System.State']; 

有訪問JSON對象屬性的許多不同的方式,因爲你已經在你的問題中提到。但是,如果屬性名稱中包含點或空格,則需要回退到數組表示法。這意味着下面的嘗試將yeld正確的結果:

  • query.fields
  • query[fields]
  • query.fields['System.State']
  • query[fields]['System.State']

但下面的人不會:

  • query.fields.System.State
  • query[fields].System.State

這是因爲,在過去的兩個方面,JavaScript的會認爲你正在試圖訪問query.fields.System對象的State屬性(不存在)。

這同樣適用於具有名稱包含空格的屬性的對象。作爲object['my property']訪問他們將工作,但使用點符號object.my property不會。

對此其他問題可以在這裏看到:

+0

我明白了,謝謝!有效!另外,還有一個快速問題。我可以通過索引訪問「字段」內的變量嗎?像, var $ list = query.fields [0];或類似的東西? – student123

+0

由於JSON對象是一個映射,您將無法使用像0,1,2 **這樣的索引來訪問它,除非您明確定義了稱爲0,1,2 ...的屬性 - 使用了索引表示法遍歷數組,但不包含JSON對象。您可以使用['for ... in'](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Statements/for...in)遍歷所有屬性(並且確保爲了安全,使用'hasOwnProperty'檢查屬性)。 –

+0

看看這裏,看看你可以做到這一點:http:// stackoverflow。com/questions/684672/how-do-i-loop-through-or -enumerate -a-javascript-object –

1

試試這個:

var $list = query.fields["System.WorkItemType"]; 

JavaScript的解釋系統和WorkItemType作爲,因爲點的嵌套屬性。

0

訪問JSON中的元素是很容易的:

1º創建一個新的var來轉換j兒子數據到一個新的對象。真的json有javascript對象格式。 「」

var data = '{ "count": 15, "value": [ {"id": 284, "rev": 1, "fields": {"System.WorkItemType": "User Story", "System.State": "New", "System.Reason": "New", "System.CreatedDate": "2016-06-23T14:31:37.567Z", }, ...(some code below) ' 

var json = JSON.parse(data); 

2º通過或「[]」訪問對象的特定元素:

點標記:

var json.value[n].fields['System.State']; 

注意,您可以使用點表示法與系統。狀態鍵。

[]符號:

var json['value'][n]['fields']['System.State']; 

n索引來訪問你的對象數組的特定元素