Website-Suche

typescript - Javascript: Eine JSON-Zeichenkette in eine ES6-Map oder anderes konvertieren, um die Reihenfolge der Schlüssel beizubehalten


Gibt es eine native (eingebaute) Methode in ES6 (oder nachfolgenden Versionen), JavaScript oder in TypeScript, um eine JSON-Zeichenkette in eine ES6-Map zu konvertieren, ODER ist die Implementierung eines selbstgemachten Parsers die Option? Das Ziel ist, die Reihenfolge der Schlüssel des JSON-String-kodierten Objekts zu erhalten.

Hinweis: Ich vermeide bewusst das Wort „parsen“, um zu verhindern, dass eine JSON-Zeichenkette zuerst in ein ECMA-Script-/JavaScript-Objekt umgewandelt wird, das definitionsgemäß keine Reihenfolge seiner Schlüssel hat.

Zum Beispiel:

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

Ich brauche:

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

Antwort #1

AKTUALISIERUNG

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

Das Einzige, was ich anders mache, ist, die Schlüssel mit Regex zu bekommen, um die Reihenfolge beizubehalten

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

Wenn ich verstehe, was Sie mit Option 2 erreichen wollen, hier ist, was mir eingefallen ist.

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)

Im Grunde alle Schlüssel des Objekts holen und dann reduzieren. Die Reduzierfunktion wandelt jeden Schlüssel in ein Objekt um

Antwort #2

function jsonToMap(jsonStr) {
    return new Map(JSON.parse(jsonStr));
}

Mehr Details : http://2ality.com/2015/08/es6-map-json.html