JSON 数组转JS对象数组
JSON Array into JS Object Array
我真的很讨厌 'do this for me' 问题,但我完全不知所措。我想我就是不明白 JSON。所以这是我的 JSON:
的例子
"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);
并获得"Fortitude"。我了解如何使用 $.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);
});
首先,您的JSon数据无效。
此数据设置为 Json 的正确格式如下:
{
"max": "10",
"min": "0",
"attributes": [
{
"attributeName": "Fortitude",
"attributeColor": "#B7B7B7"
},
{
"attributeName": "Vigor",
"attributeColor": "#D5A6BD"
},
{
"attributeName": "Celerity",
"attributeColor": "#B4A7D6"
}
]
}
而且,在这种情况下,我强烈建议使用 Jspath。 Jspath 允许您对 JSon 数据执行 XPath 表达式。
这可能是您想要的:
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);
});
使用开源项目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');
这将 return 收集以下内容:
[
{
"attributeName":"Fortitude",
"attributeColor":"#B7B7B7"
},
{
"attributeName":"Vigor",
"attributeColor":"#D5A6BD"
},
{
"attributeName":"Celerity",
"attributeColor":"#B4A7D6"
}
]
我真的很讨厌 'do this for me' 问题,但我完全不知所措。我想我就是不明白 JSON。所以这是我的 JSON:
的例子"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);
并获得"Fortitude"。我了解如何使用 $.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);
});
首先,您的JSon数据无效。
此数据设置为 Json 的正确格式如下:
{
"max": "10",
"min": "0",
"attributes": [
{
"attributeName": "Fortitude",
"attributeColor": "#B7B7B7"
},
{
"attributeName": "Vigor",
"attributeColor": "#D5A6BD"
},
{
"attributeName": "Celerity",
"attributeColor": "#B4A7D6"
}
]
}
而且,在这种情况下,我强烈建议使用 Jspath。 Jspath 允许您对 JSon 数据执行 XPath 表达式。
这可能是您想要的:
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);
});
使用开源项目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');
这将 return 收集以下内容:
[
{
"attributeName":"Fortitude",
"attributeColor":"#B7B7B7"
},
{
"attributeName":"Vigor",
"attributeColor":"#D5A6BD"
},
{
"attributeName":"Celerity",
"attributeColor":"#B4A7D6"
}
]