对 JSON 进行排序或按原始顺序获取 JSON [重复]
Posted
技术标签:
【中文标题】对 JSON 进行排序或按原始顺序获取 JSON [重复]【英文标题】:Sort JSON or get JSON in original order [duplicate] 【发布时间】:2020-02-04 16:58:37 【问题描述】:由于无法获取原始顺序的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)。
【问题讨论】:
不保证密钥顺序。如果需要对它们进行排序,请返回[ id, data ]
对数组。
@Mr.Polywhirl 在符合 ES6 的环境中它 是 但是你不能有相反顺序的数字键。在非 ES6 兼容的环境中,您只是没有保证。所以这是一个双输的局面。与往常一样,建议是,如果您想要有序对象,请使用数组。
@VLAZ 你能给我一个我的代码示例吗?
@Anuga 我试过这个,但我无法让它工作。你能给我一个我的代码的例子吗:)?
真正的问题是为什么您希望数据的顺序是某种方式?
【参考方案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];
);
【讨论】:
【参考方案2】:因为对象并不总是保证保持其顺序,并且 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]);
【讨论】:
【参考方案3】:为保证顺序,请将数据重新构造为二维数组。
您可以创建索引映射和查找功能,使数据更易于查询。
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;
【讨论】:
以上是关于对 JSON 进行排序或按原始顺序获取 JSON [重复]的主要内容,如果未能解决你的问题,请参考以下文章
jQuery - 按时间顺序对任何给定的 JSON 进行排序
如何在 swift 中按字母顺序对 JSON 字符串进行排序?
Jackson 在 Android 上按字母顺序对 JSON 序列化输出键进行排序