Json基于价值排序

时间:2014-08-09 09:10:37

标签: javascript json

我有json示例,我需要使用javascript / jquery根据值进行排序。 我在下面添加了示例json代码和预期的输出代码。 例如,有这个代码:

   var json = {
    "users": {
        "metrics": {
            "e-f2e04fc7aa72": {
                "order": 5,
                "displayName": "User5"
            },
            "bb202c11-5d44-48a": {
                "order": 1,
                "displayName": "User2"
            },
            "a0d6e3afa2b5": {
                "order": 3,
                "displayName": "User3"
            },
            "46af13d22392856da": {
                "order": 4,
                "displayName": "User4"
            },
            "0c5f43cdd73b9cf623": {
                "order": 2,
                "displayName": "User2"
            }
        }
    }
}

我怎样才能将这个json排序为:

var json = {
    "users": {
        "metrics": {
            "bb202c11-5d44-48a": {
                "order": 1,
                "displayName": "User1"
            },
            "0c5f43cdd73b9cf623": {
                "order": 2,
                "displayName": "User2"
            },
            "a0d6e3afa2b5": {
                "order": 3,
                "displayName": "User3"
            },
            "46af13d22392856da": {
                "order": 4,
                "displayName": "User4"
            },
            "e-f2e04fc7aa72": {
                "order": 5,
                "displayName": "User5"
            },

        }
    }
}

3 个答案:

答案 0 :(得分:0)

您可以使用以下方法迭代指标的属性: for .. in,并创建用户列表。然后它可以被分类。

var users = []
var metrics = json.users.metrics

for (var userId in metrics) {
    var user = metrics[userId];
    user["userId"] = userId;
    users.push(user);
}

然而,在您期望的格式中,您不能这样做,因为对象属性无法排序(据我所知)。

答案 1 :(得分:0)

您无法对对象进行排序,但您可以从中创建排序列表。

var metricsSorted = [];
for (var key in json.users.metrics) {
    var metric = json.users.metrics[key];
    metric.id = key;
    metricsSorted.push(metric);
}
metricsSorted.sort(function(a, b) {
    return a.order - b.order;
});
console.log(metricsSorted);

答案 2 :(得分:0)

首先,您无法对对象进行排序,您可以将目标json定义为数组,以便对其进行排序。

假设您可以将json定义为:

var json = {
    "users": {
        "metrics": [
            {   "id": "bb202c11-5d44-48a",
                "order": 1,
                "displayName": "User1"
            },
            {   "id": "0c5f43cdd73b9cf623",
                "order": 2,
                "displayName": "User2"
            },
            {   "id": "a0d6e3afa2b5",
                "order": 3,
                "displayName": "User3"
            },
            {   "id": "46af13d22392856da",
                "order": 4,
                "displayName": "User4"
            },
            {   "id": "e-f2e04fc7aa72",
                "order": 5,
                "displayName": "User5"
            }
        ]
    }
}

然后您可以使用下面的代码将原始json排序到它中,如下所示:

var metrics = []
for(var id in json.users.metrics){
    metrics.push({"id": id,"order":json.users.metrics[id].order,"displayName":json.users.metrics[id].displayName})
}
metrics.sort(function(a,b) { return a.order - b.order } );

json.users.metrics = metrics

//console.log(JSON.stringify(json))