有效地比较2 json

时间:2014-11-27 04:00:44

标签: java json

我有一个json让我们说json 1

[
    {
        "id": "123",
        "testname": "test123",
        "name": "John Doe",
        "active": true,
        "type": "test6"
    }

 {
        "id": "456",
        "testname": "test564",
        "name": "Ship Therasus",
        "active": true,
        "type": "test7"
    }

.... some 100 entries 
]

和json 2有点像下面

[
    {
        "id": "123",
        "country": "USA",
        "state": "KA",
        "age": 24,
        "group": "g1"
    }

 {
        "id": "456",
        "country": "UK",
        "state": "MA",
        "age": 28,
        "group": "G2"
    }

...... 100 entries
]

现在Id是json1和json2之间的常量我希望制作一个结果json,如下所示调用json3.I想要匹配id并从json2获取country和state并附加到json 1.我不看代码,但如果我做暴力,它需要100 * 100,因此性能问题。有没有更好的方法来解决这个问题?

[
    {
        "id": "123",
        "testname": "test123",
        "name": "John Doe",
        "active": true,
        "type": "test6",
        "country":"USA",
         "state":"KA"
    }

 {
        "id": "456",
        "testname": "test564",
        "name": "Ship Therasus",
        "active": true,
        "type": "test7",
         "country":"UK",
         "state":"MA"
    }
]

2 个答案:

答案 0 :(得分:1)

解决这个问题的最佳方法是O(size(json1 || json2)),因为你必须完全通过所有的json列表来遍历所有的ID。如果您有一个恒定的时间查找(如通过ID键入的hashmap),您将能够提取有关该特定ID的信息。老实说,我不熟悉json建议使用的数据结构,但我知道在Java中,hashmaps是一种常用的常量时间查找。最好的方法是:

  • 循环浏览一个json列表
  • 从此列表中的每个条目中提取ID
  • 使用相同的ID
  • 查找其他json列表中的信息
  • 合并生成的json列表中的所有信息

虽然这个答案有点模糊,但我希望它有所帮助。

答案 1 :(得分:1)

在没有做出任何假设的情况下,我无法想出任何基于给定信息避免O(n ^ 2)复杂性的方法。

但是,如果您的数组已经按对象ID排序,则可以通过迭代数组来加快它的速度。

var json3 = [];

for(var i = 0; i < json1.length; i++) {
    json3.push($.extend({}, json1[i], json2[i]));
}

如果您可以控制数据结构,则由id键入的对象比数组更容易使用: e.g。

json1 = {
"123": {"testname": "test123", ...},"456": {...}
}

然后你的代码就是

var json3 = {};
for(var id in json1) {
    json3[id] = $.extend({}, json1[id], json2[id]));
}