按值对 JSON 进行排序 [重复]

Posted

技术标签:

【中文标题】按值对 JSON 进行排序 [重复]【英文标题】:Sort JSON by value [duplicate] 【发布时间】:2016-06-05 04:50:17 【问题描述】:

如何按名称排序我的 json 文件 -> 值?我想按标签名称的 asc 值显示。知道如何转换我的 json 文件吗?

这是我的 JSON 文件的外观:

[
    "id": "105",
    "name": "FIAT",
    "active": true,
    "parentId": "1"
, 
    "id": "106",
    "name": "AUDI",
    "active": true,
    "parentId": "1"
, 
    "id": "107",
    "name": "BMW",
    "active": true,
    "parentId": "1"
, 
    "id": "109",
    "name": "RENAULT",
    "active": true,
    "parentId": "1"
]

如果有人帮助我,我将不胜感激。提前致谢。

【问题讨论】:

你是在客户端还是服务器端排序? 您使用的是 php 还是 javascript 您应该提供更多信息;如前所述,我们需要知道您想在 Php 或 js 中执行此操作(例如,如果您想在客户端执行此操作,您甚至不必更改 JSON,只需在 js 上使用 _ 对数组进行排序。排序()) 您是要按name 的值对整个对象数组进行排序,还是要对每个单独的对象进行排序,以便键按字母顺序显示? 【参考方案1】:

我建议使用Array#sort()

var data = [
     "id": "105", "name": "FIAT",    "active": true, "parentId": "1" ,
     "id": "106", "name": "AUDI",    "active": true, "parentId": "1" ,
     "id": "107", "name": "BMW",     "active": true, "parentId": "1" ,
     "id": "109", "name": "RENAULT", "active": true, "parentId": "1" 
];

data.sort(function (a, b) 
    return a.name.localeCompare(b.name);
);

document.write('<pre>' + JSON.stringify(data, 0, 4) + '</pre>');

【讨论】:

localeCompare 支持是否足够广泛? @Matthijs,你说的extensive是什么意思? 我说的是浏览器支持。原来 Safari 不支持您描述的区域设置比较;因此,如果您以此为目标,则需要另一种类型的比较。 是的,没错。 a.name - b.name【参考方案2】:

非常直接。

var data = [
   "id": "105", "name": "FIAT",    "active": true, "parentId": "1" ,
   "id": "106", "name": "AUDI",    "active": true, "parentId": "1" ,
   "id": "107", "name": "BMW",     "active": true, "parentId": "1" ,
   "id": "109", "name": "RENAULT", "active": true, "parentId": "1" 
];

data.sort(function(a, b) 
  return a.name > b.name;
);

console.log(data);

【讨论】:

你实际上是调用了2次data.sort(),第二次调用是多余的 我们不能用return a.name - b.name代替return a.name &gt; b.name;

以上是关于按值对 JSON 进行排序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

按值对HashMap进行排序[重复]

按值对字典进行排序[重复]

如何按值对数组进行排序(排序)? *有一个转折*

在Java中按键或值对地图进行排序[重复]

如何按值对 Python 字典进行排序? [复制]

C#:按值对 json 对象进行排序