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
