首页 > 解决方案 > 解析 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);
        }
    } 

在此处输入图像描述

编辑:如上所示,我在迭代键后按原始顺序(在键数组中)获取键,但问题是我不知道在映射键后获取所有记录。

标签: javascriptjqueryjson

解决方案


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但它保持键的顺序。


推荐阅读