JavaScript解析JSON时如何保留整数类型键的原有顺序不被自动排序
解决方案
你可以利用 JSON.parse() 回调(reviver 函数)的执行特性解决问题:reviver 函数会严格按照 JSON 字符串中键的定义顺序触发,不会受 JS 对象数字键自动排序的规则影响。你只需要在解析 JSON 时提前记录下 products 下键的原始顺序,后续按这个顺序遍历渲染即可,完全不需要修改原有数据结构、键值,也不用换成数组存储。
完整实现代码
// 原始JSON字符串 const jsonStr = '{"products":{"0":"Please Select","2":"Example 1","3":"Example 2","4":"Example 3","5":"Example 4","88":"Example 5","7":"Example 6","8":"Example 7"}}'; // 用于存储products的原始键顺序 const productKeyOrder = []; // 解析JSON时用reviver记录顺序 const res = JSON.parse(jsonStr, function (key, value) { // 匹配products下的子键,按JSON定义顺序存入数组 if (Object.prototype.hasOwnProperty.call(this, 'products') && key !== 'products') { productKeyOrder.push(key); } return value; }); // 按记录的原始顺序渲染option productKeyOrder.forEach(key => { $('#myList').append(`<option value="${key}">${res.products[key]}</option>`); });
方案说明
- 没有修改任何原始数据的键值、结构,完全满足你的限制条件
- 兼容所有支持ES5的浏览器,没有额外依赖
- 不需要额外做JSON字符串正则匹配,逻辑稳定性更高
内容的提问来源于stack exchange,提问作者Antony
相关产品推荐
相关产品推荐

