javascript - 解析 JSON 对象时如何保留键的顺序
问题描述
我需要在解析 json 数据时保留键的顺序。在下图中,原始键按“ProgramName、Curtailment1、2 等”的顺序排列,但在解析后按字母顺序排列。
我正在尝试以下解决方法来修复它,但对如何用原始键顺序中的所有数据填充新数组感到困惑。
var keys = [];
for (var key in dataset[0]) { //dataset is parsed json
if (dataset[0].hasOwnProperty(key)) {
keys.push(key);
}
}
编辑:如上所示,我在迭代键后按原始顺序(在键数组中)获取键,但问题是我不知道在映射键后获取所有记录。
解决方案
JavaScript 中的Object
键没有顺序,不像Array
. 因此,当您在对象上使用Object.keys()
或使用for/in
循环时,不会承诺按固定顺序返回键。
要解决此问题,您应该将数据结构转换为Array
格式。例如,更改{ "CurtailmentDT1": "High Icon", "CurtailmentDT2": "Medium Icon" }
为[ "High Icon", "Medium Icon" ]
或使用一个order
键来维护索引,例如
{
"CurtailmentDT1": { "index": 1, "value": "High Icon" },
"CurtailmentDT2": { "index": 2, "value": "Medium Icon" }
}
使用index
键,您可以对 JSON 中的键/值进行排序。
您还可以使用
Map
数据结构,它更像是一个Object
但它保持键的顺序。
推荐阅读
- ansible - 引用另一个文件中的变量
- c# - 展平分组列表并根据项目的频率排序(生产计划)
- android - 出现此错误:类型'String'不是颤振应用程序上'index'的'int'类型的子类型
- amazon-web-services - 我可以使用 aws amplify 和 @auth 装饰器将 GraphQL 突变设为私有吗?这被认为是一种安全的方法吗?
- c++ - 如何在 C++ 中加载数据库以构建结构?
- javascript - 如何在循环遍历要删除的数组项的索引列表时最有效地拼接数组?
- c - 如何使用 Paho MQTT C 客户端发送整数和字符数组
- javascript - 如何将 if / else if 语句导出到 Class 组件内的函数中?反应,节点,表达
- android - 如何在应用更新中自定义文本?所以我们可以向他们解释什么是新的或为什么用户应该更新
- javascript - 如何保护 ckeditor 更改我的源代码?