Javascript 将JSON解析为映射以保留键的顺序

Javascript 将JSON解析为映射以保留键的顺序,javascript,json,Javascript,Json,我有以下来自web请求的JSON结构,我需要解析它并保留键的顺序 const json = `{ "2": "first", "1": "second" }`; 但是,根据规范,JSON.parse()不能保证键的顺序,在几乎所有的实现中,这意味着键是按字母或数字顺序排列的,从而产生以下对象 { 1: "second" 2: "first"

我有以下来自web请求的JSON结构,我需要解析它并保留键的顺序

const json = `{
    "2": "first",
    "1": "second"   
}`;
但是,根据规范,
JSON.parse()
不能保证键的顺序,在几乎所有的实现中,这意味着键是按字母或数字顺序排列的,从而产生以下对象

{
    1: "second"
    2: "first"
}
为了保留键的顺序,我想直接将JSON字符串解析到映射中,因为映射将保留键的顺序。然而,到目前为止,我发现的一切,都建议使用下面的代码,这显然会首先将其解析为一个对象(并破坏键的顺序),然后将该对象转换为一个映射

new Map(Object.entries(JSON.parse(json)));
所以我的问题是,是否有一种方法可以直接将JSON解析成一个映射并保留键的顺序

const json = `{
    "2": "first",
    "1": "second"   
}`;
第二个问题是,这是否也仅适用于子对象,如

const nestedJson = '{
    "I_dont_care_about_the_order": "foobar",
    "Preserve_the_order_in_this_object": {
        "2": "first",
        "1": "second"   
    }   
}';

不能更改与数组的32位整数索引类似的键的顺序。Javascript将它们移动到顶部

但您可以将一个对象作为值并添加一个所需顺序的属性,如

json = '{
    "2": { "order": 1, "value": "first" },
    "1": { "order": 2, "value": "second" }
}';

您的“JSON”不是JSON。它的语法是无效的,正如您想要的输出对象一样。为什么您关心顺序?如果顺序是相关的,发送方应该发送一个数组。对不起,JSON不正确,我已经修复了它。我关心顺序,因为该对象中的条目来自web请求,并且在服务器上进行排序。服务器使用对象ID(整数)作为返回对象中的键,但以JSON字符串的正确顺序发送它们。然后,需要在服务器端固定用于处理、发送和检索数据的所选数据格式。如果FE logic开始修复数据交换格式,那么在中间件/后端中/处处理此类数据已经完全错误了。不幸的是,我无法更改JSON来自的服务器的响应。