合并几个json文件到一个

时间:2012-10-22 10:59:30

标签: javascript json backbone.js

经过几天的谷歌搜索,我终于推动自己在这里提出问题。

我的文件很少json

localhost/feed01.json
localhost/feed02.json
localhost/feed03.json

所有json文件结构与此类似。但随机数据包括随机数据,id,日期类型等......

[
        {
            "id":1,
            "date": "12/12/2011",
            "type": "Run",
            "distance": "3 miles",
            "comments": "This was really hard",
            "minutes": 36
        },
        {
            "id":2,
            "date": "12/11/2011",
            "type": "Bike",
            "distance": "6 miles",
            "comments": "All down hill...felt like nothing",
            "minutes": 30
        },
        {
            "id":3,
            "date": "12/10/2011",
            "type": "Walk",
            "distance": "2.5 miles",
            "comments": "Shouldn't have taken the dog",
            "minutes": 45
        }
]

现在我想将所有这些json文件合并为一个并默认按 date 排序(初始化时)。使用集合使用backbone.js进行合并和排序的最佳方法是什么?

2 个答案:

答案 0 :(得分:1)

Backbone允许您通过选项

覆盖一些backbone.sync
  • 您可以将目标网址作为选项传递给collection.fetch以覆盖默认网址
  • 并且传递add: true会将模型附加到集合而不是重置它

表示您可以使用

构建集合
var c = new Backbone.Collection();
c.fetch({
    url: ('localhost/feed01.json'),
    add: true
});
c.fetch({
    url: ('localhost/feed02.json'),
    add: true
});
...

要在所有提取完成后调用回调,您可以构建jQuery deferred object

var files = ['localhost/feed01.json', 'localhost/feed02.json', 'localhost/feed03.json'];
var c=new Backbone.Collection();
var dfds = [], dfd, i, l;
for (i=0, l=files.length; i<l;i++) {
    dfd = c.fetch({
        url: (files[i]),
        add: true
    });
    dfds.push(dfd);
}

$.when.apply(null, dfds).done(function() {
    console.log(c.pluck('id'));
});

答案 1 :(得分:0)

要合并数据,只需创建一个集合,并将所有带有json对象/模型表示的数组添加到此集合中。为了实现这一功能,您可以覆盖fetch方法并使其执行3次ajax调用并使用jquery延迟等待,直到解析所有这三种方法,并在解析获取请求之前将返回的数据添加到集合中。

要更改排序逻辑,您需要覆盖集合comparator方法,以根据您的数据进行排序。

您可以将其指定为例如此

comparator: function(model) {
    return +new Date(model.get('date'));
}

它会按日期排序。

如果您因为任何原因在将模型添加到集合后指定比较器,则需要调用sort方法,以便模型根据比较器指定的规则进行排序