Javascript:将 JSON 字符串转换为 ES6 映射或其他以保留键的顺序

标签 javascript typescript ecmascript-6

在 ES6(或后续版本)、Javascript 或 TypeScript 中是否有本地(内置)方法将 JSON 字符串转换为 ES6 映射或要实现的自制解析器是选项? 目标是保留 JSON 字符串编码对象的键顺序。

注意:我故意不使用“解析”这个词,以避免首先将 JSON 字符串转换为 ECMA 脚本/JavaScript 对象,根据定义,其键没有顺序。

例如:

{"b": "bar", "a": "foo" }        // <-- This is how the JSON string looks

我需要:

{ b: "bar", a: "foo" }           // <-- desired (map version of it)

最佳答案

更新

https://jsbin.com/kiqeneluzi/1/edit?js,console

我唯一不同的是用正则表达式获取键来维护顺序

let j = "{\"b\": \"bar\", \"a\": \"foo\", \"1\": \"value\"}"
let js = JSON.parse(j)

// Get the keys and maintain the order
let myRegex = /\"([^"]+)":/g;
let keys = []
while ((m = myRegex.exec(j)) !== null) {
    keys.push(m[1])
}

// Transform each key to an object
let res = keys.reduce(function (acc, curr) {
     acc.push({
         [curr]: js[curr]
    });
    return acc
}, []);


console.log(res)

原创

如果我理解您要为选项 2 实现的目标。这就是我想出的。

https://jsbin.com/pocisocoya/1/edit?js,console

let j = "{\"b\": \"bar\", \"a\": \"foo\"}"

let js = JSON.parse(j)

let res = Object.keys(js).reduce(function (acc, curr) {
    acc.push({
      [curr]: js[curr]
    });
    return acc
}, []);


console.log(res)

基本上是获取对象的所有key,然后reduce。 reducer 函数将每个键转换为一个对象

关于Javascript:将 JSON 字符串转换为 ES6 映射或其他以保留键的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53112718/

相关文章:

javascript - ES6/ react : Why is my triple-nested setState update not working?

javascript - jquery版本的tinymce 4

javascript - SailsJS - 使用自定义 ID 创建新记录

javascript - 如何对特定数据表应用过滤器

angular - 如何在 Angular 5(或 >4.3)中将 Http 转换为 HttpClient?

typescript - 使用 Playwright 在单个测试中使用多个测试夹具

javascript - ECMAScript/Javascript 6 中的类是否需要 IIFE?

javascript - 在 jquery 中将标题与 slider 对齐

javascript - 如何在 Angular2 中获得 observable 的响应?

javascript - Bluebird中的捕获错误类型不起作用