代码格式背景(默认按 sort 字段到排序):
# 原 JSON 格式:old_json_arr
{
"123": {"name":"成功案例", "sort":2},
"124": {"name":"品牌优势", "sort":0},
...
}
# 转换后的 JSON 格式:new_json_arr
[
{"id":123, "name":"成功案例", "sort":2}},
{"id":124, "name":"品牌优势", "sort":0}}},
...
]
-------------------------------------------------------
一、Javascript 的 JSON 代码:
// 因为排序问题,将转换JSON格式 {"123": {"name":"成功案例", "sort":2}...} TO [{"id":123, "name":"成功案例", "sort":2}}...]
function get_new_json(old_json) {
var arr = [];
for (var id in old_json) {
var j = old_json[id]
j['id'] = parseInt(id);
arr.push(j);
}
return json_orderBy(arr, 'sort', 'DESC');
}
function json_orderBy(arr, col, desc) {
if (arr.length < 2 || Object.prototype.toString.apply(arr[0]) !== '[object Object]' || !col || !arr[0][col])
return arr;
var fieldType = typeof arr[0][col];
if (fieldType === 'number') {
arr.sort(function(x, y) {
return x[col] - y[col];
});
} else if (fieldType === 'string') {
arr.sort(function(x, y) {
return x[col].localeCompare(y[col]);
});
}
if (desc) arr.reverse();
return arr;
}
var json = get_new_json(old_json);
-------------------------------------------------------
二、PHP 的 JSON 排序代码:
function json_orderBy($old_json_arr = '', $desc = '') {
// 因为排序问题,将转换JSON格式 {"123": {"name":"成功案例", "sort":2}...} TO [{"id":123, "name":"成功案例", "sort":2}}...]
$new_json_arr = array();
foreach ($old_json_arr as $id => $row) {
$row['id'] = $id;
$new_json_arr[] = $row;
}
// 倒排序
if ($desc === 'DESC') {
$orderByDesc = function($a, $b) {
if ($a['sort'] == $b['sort']) return 0;
return ($a['sort']<$b['sort']) ? 1 : -1;
};
usort($new_json_arr, $orderByDesc);
}
return $new_json_arr;
}
$json = json_orderBy($old_json_arr, 'DESC');
下图为 Javascript 排序后的结果