JSON数组到JS对象数组

问题描述:

我真的很讨厌'为我做这个'的问题,但我完全丧失。我想我只是没有得到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

这可能是你所追求的:

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

首先,你的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

使用开源项目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" 
     } 
    ]