2015-04-02 205 views
0

我真的很討厭'爲我做這個'的問題,但我完全喪失。我想我只是沒有得到JSON。因此,這裏是我的JSON的例子:JSON數組到JS對象數組

"max":"10", 
"min":"0", 
"attributes":[ 
    { 
     "attributeName":"Fortitude", 
     "attributeColor":"#B7B7B7" 
    }, 
    { 
     "attributeName":"Vigor", 
     "attributeColor":"#D5A6BD" 
    }, 
    { 
     "attributeName":"Celerity", 
     "attributeColor":"#B4A7D6" 
    } 
] 

這是外部的,我想抓住它,然後設置一個js變量作爲屬性對象的數組。所以,如果在JS我設置:

var attributes = []; 
attributes = whatEverNeedsToGoHere; 

然後我遍歷該變量我可以這樣做:

console.log(attributes[0].attributeName); 

並獲得「堅韌」。我知道如何使用$ .getJSON()獲取JSON和jQuery;但我不知道要將屬性數組轉換爲對象數組需要發生什麼。

更新:我現在正在調用JSON。

var attributesData = $.getJSON("jsonDB/attributes.js", function(data){ 

     var thisAttribute = {"attributeName":String(data[i].attributeName),"attributeColor":String(data[i].attributeColor)}; 
     attributes.push(thisAttribute); 
     console.log(attributes.attributeName); 

}); 
+1

「這是外部的,我想抓住它」 - 哪裏是你的Ajax調用,這是否? – 2015-04-02 14:43:42

回答

1

這可能是你所追求的:

var attributes; 

$.getJSON("jsonDB/attributes.js", function(data){ 
    attributes = data.attributes; 
    console.log(attributes); 
}); 

您可以測試它here。我已經掐滅getJSON爲了這個目的:

function getJSON(url, callbackfn){ 
    var data = { 
    "max":"10", 
    "min":"0", 
    "attributes":[ 
     { 
     "attributeName":"Fortitude", 
     "attributeColor":"#B7B7B7" 
     }, 
     { 
     "attributeName":"Vigor", 
     "attributeColor":"#D5A6BD" 
     }, 
     { 
     "attributeName":"Celerity", 
     "attributeColor":"#B4A7D6" 
     } 
    ] 
    } 

    callbackfn(data); 
} 

var attributes; 

getJSON("jsonDB/attributes.js", function(data){ 
    attributes = data.attributes; 
    console.log(attributes); 
}); 
+0

我知道它是簡單的。 Seamus ...我...我愛你。 – henonChesser 2015-04-02 15:16:10

0

首先,你的JSon數據是無效的。

此數據被設置爲JSON正確的格式如下:

{ 
    "max": "10", 
    "min": "0", 
    "attributes": [ 
     { 
      "attributeName": "Fortitude", 
      "attributeColor": "#B7B7B7" 
     }, 
     { 
      "attributeName": "Vigor", 
      "attributeColor": "#D5A6BD" 
     }, 
     { 
      "attributeName": "Celerity", 
      "attributeColor": "#B4A7D6" 
     } 
    ] 
} 

而且,在這種情況下,我非常建議使用Jspath。 Jspath允許您在JSon數據上執行XPath表達式。

+0

我會研究一下,它讓我想起了JSON的查詢引擎。但是,在JS或jQuery中沒有原生的方法嗎? – henonChesser 2015-04-02 14:54:07

+1

對於這個小的JSON數據包來說,整個庫真的很重要? – 2015-04-02 14:59:32

1

使用開源項目jinqJs你可以做這樣的一條線

var data = {"max":"10", 
 
"min":"0", 
 
"attributes":[ 
 
    { 
 
     "attributeName":"Fortitude", 
 
     "attributeColor":"#B7B7B7" 
 
    }, 
 
    { 
 
     "attributeName":"Vigor", 
 
     "attributeColor":"#D5A6BD" 
 
    }, 
 
    { 
 
     "attributeName":"Celerity", 
 
     "attributeColor":"#B4A7D6" 
 
    } 
 
] 
 
} 
 

 
var result = jinqJs().from(data).select('attributes'); 
 

 
document.body.innerHTML += '<pre>' + JSON.stringify(result, null, 4) + '</pre>';
<script src="https://rawgit.com/fordth/jinqJs/master/jinqjs.js"></script>

var attributes = jinqJs().from('http://..some json url').select('attributes'); 

這將返回下面的集合:

[ 
     { 
      "attributeName":"Fortitude", 
      "attributeColor":"#B7B7B7" 
     }, 
     { 
      "attributeName":"Vigor", 
      "attributeColor":"#D5A6BD" 
     }, 
     { 
      "attributeName":"Celerity", 
      "attributeColor":"#B4A7D6" 
     } 
    ]