我正在处理许多小型JSON文件。任务是将它表示为d3可折叠库的合并大json文件。从互联网上的资源我发现了一种使用以下脚本合并数组的方法:
(function($){
$.concat || $.extend({
concat: function(b,c){
var a=[];
for(var x in arguments)
if(typeof a == 'object') a = a.concat(arguments[x]);
return a;
}
});
})(jQuery);
function foo() {
$(function() {
var a = $.getJSON("clinical.json");
var b = $.getJSON("industry.json");
$finalObj = $.concat(a, b);
});
}
合并文件后,我尝试将结果设置到库中
treeJSON = d3.json(foo(), function (error, treeData) { ...
但我收到以下错误:
1. GET http://localhost:63342/testMerg/undefined 404 (Not Found)
2. Uncaught TypeError: Cannot set property 'x0' of undefined
如果第二个的性质我清楚地理解,那导致d3没有构建树的必要资源,所以第一个我根本不理解。
我最终想要的是比较两个JSON文件,将它们合并到一个文件中并用d3渲染它。
我试图在互联网上找到一些用于合并和比较json文件的库,但不幸的是,这是不吉利的...有人可以给我一个建议吗?
答案 0 :(得分:1)
$.getJSON()
是异步的,$finalObj
不会被设置为$.getJSON()
返回的连接数组,而是连接的jQuery对象。
尝试使用$.when()
等待两个$.getJSON()
调用完成后再连接响应,.then()
在异步进程后执行进程。
var res = [];
$.when($.getJSON(), $.getJSON())
.then(function(a, b) {
res = $.concat(a[0], b[0]);
return res
})
.then(function(data) {
// do stuff with `data` : `res`
})