排序JSON或以原始顺序获取JSON

时间:2019-10-07 11:38:58

标签: javascript jquery arrays json sorting

由于无法获得原始顺序的JSON文件,因此我想再次在JS中对其进行排序。该文件如下所示:

{
    "index": 5,
    "timestamp": 1570438008,
    "data": {
        "12": [
            "Title 2",
            "Description 2"
        ],
        "10": [
            "Title 1",
            "Description 1"
        ]
    }
}

如果我现在从JS访问此JSON文件,则会收到不同于原始订单的其他订单:

$.ajax({
    url: '../json/smiirl_data.json',
    dataType: 'json',
    success: function(response) {
        console.log(response['data']);
    }
});
JS的

console.log显示:

{
    "10": [
        "Title 1",
        "Description 1"
    ],
    "12": [
        "Title 2",
        "Description 2"
    ]
}

可以排序(标题降序)吗?我需要原始顺序(12,10)。

3 个答案:

答案 0 :(得分:1)

首先,您需要将对象序列化为数组,然后再使用sort函数对其进行排序。

var array = [],
    data = response['data'];

    for (var array in data ) {
         array.push([array, data[vehicle]]);
    }

     array.sort(function(a, b) {
        return b[1] - a[1];
     });

答案 1 :(得分:0)

因为不能总是保证对象保持顺序,并且JSON不支持保证顺序的Map类,所以应该改用数组,该数组包含两个元素:键和值。

例如:

"data": [
  [12, ["Title 2", "Description 2"],
  [10, ["Title 1", "Description 1"]
]

您可以通过以下方式访问它:

for(let item of myJSON.data)
{
  console.log('Key:', item[0]);
  console.log('Value:', item[1]);
}

答案 2 :(得分:0)

为保证顺序,请将数据重新构造为二维数组。

您可以创建索引图和查找功能,以使数据更易于查询。

let data = {
  "index": 5,
  "timestamp": 1570438008,
  "data": [
    [ "12", [ "Title 2", "Description 2" ] ],
    [ "10", [ "Title 1", "Description 1" ] ]
  ]
}

let indexMap = indexLookupMap(data.data); // Build an index
console.log(lookupEntry(data.data, indexMap, '10')); // Find entry with id '10'

data.data.forEach(entry => {
  console.log(`key => ${entry[0]}, value => ${entry[1].join(', ')}`);
})

function lookupEntry(data, indexMap, id) {
  return data[indexMap[id]][1];
}

function indexLookupMap(data) {
  return data.reduce((dict, entry, idx) => Object.assign(dict, { [entry[0]]: idx }), {});
}
.as-console-wrapper { top: 0; max-height: 100% !important; }