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

2024-05-11

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

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

例如:

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

I need:

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

UPDATE

https://jsbin.com/kiqeneluzi/1/edit?js,console 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)

ORIGINAL

如果我明白你想通过选项 2 实现什么目标。这就是我的想法。

https://jsbin.com/pocisocoya/1/edit?js,控制台 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 函数将每个键转换为一个对象

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Javascript:将 JSON 字符串转换为 ES6 映射或其他形式以保留键的顺序 的相关文章

随机推荐