[英]Filtering a remote JSON file before feeding it to a plugin
我在s3上存储了一个远程JSON文件,其格式如下:
[
{"animal_type":"dog", "name":"spike", "age":"7"},
{"animal_type":"cat", "name":"tom", "age":"1"}
// and so on
]
数据没有特定的顺序。
我正在使用Handsontable插件将数据显示为电子表格。 我的代码现在看起来像这样:
$.ajax({
type: 'GET',
url: 'http://s3.aws.com/url.json',
dataType: 'JSON',
crossDomain: true,
success: function(data) {
new Handsontable($('#data-grid')[0], {
data: data,
rowHeaders: true,
colHeaders: true
});
}
我想要做
和
基本上,除了上面的数据,我希望它看起来像这样:
[
{"pet_name":"spike", "animal":"dog"},
{"pet_name":"tom", "animal":"cat"}
// and so on
]
我了解我需要遍历data
对象并执行以下操作:
var new_data = $.each(data, function(i, item){
// do stuff
});
但是在这种情况下,我对如何重新实例化JSON对象有些迷惑。
在ajax调用之后获得success
响应时,可以简单地使用Array.reduce
更改json
结构,并将数据传递给下一个函数。
您需要注意的一件事是,首先使用JSON.parse(data)
将JSON
数据转换为javascript array/object
。
let data = [ {"animal_type":"dog", "name":"spike", "age":"7"}, {"animal_type":"cat", "name":"tom", "age":"1"} ]; data = data.reduce((acc, curr) => { let obj = {}; obj.pet_name = curr.name; obj.animal = curr.animal_type; acc.push(obj); return acc; }, []); console.log(data);
您需要像这样使用$.map
函数:
var new_data = $.map(data, function(i, item) {
return {"pet_name":item['name'], "animal":item['animal_type'] };
});
http://api.jquery.com/jquery.map/
更新:
您可以像这样配置值的重新映射:
var data = [
{"animal_type":"dog", "name":"spike", "age":"7"},
{"animal_type":"cat", "name":"tom", "age":"1"}
// and so on
];
var columns = {
"name": "pet_name",
"animal_type": "animal"
};
var new_data = $.map(data, function(item, i) {
var value = {};
$.each(item, function(propName, obj) {
value[columns[propName]] = obj;
});
return value;
});
console.log(new_data);
工作示例: https : //jsfiddle.net/thinkingmedia/5p0c55e5/
如果您打算在JavaScript中做很多这样的工作。 有一些库提供的功能比jQuery的集合功能更广泛。
问题未解决?试试以下方法:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.