Express' res.send metoda rozpozná tohoto artist je objekt a volá JSON.stringify na něm převést objekt na řetězec JSON před odesláním. Trochu zjednodušení, JSON.stringify metoda iteruje prostřednictvím vašeho artist objektové klíče v pořadí, v jakém byly vytvořeny. (Zde je odkaz na složitější vysvětlení objednávky.
) To vysvětluje současné chování.
Jiní se mohou připojit se svými vlastními návrhy, jak byste mohli dělat to, o co usilujete, ale nejprve si vyzkoušejte jeden jednoduchý:
-
Nejprve si udělejte vlastní
JSON.stringify, pomocí "náhrady" k vytvoření požadovaného výstupního pořadí :const artistString = JSON.stringify(artist, ["realName", "stageName", ...]) // '{"realName": "Paul David Hewson", "stageName": "Bono", ...}' -
Poté použijte
res.json(artistString), spíše nežres.send, abyste odeslali svůj řetězec JSON se správnýmContent-Typezáhlaví. (res.sendpředpokládá, že chceteContent-Type: “text/html”.)
Určitě existují složitější přístupy, včetně vytvoření funkce, která získá klíče, seřadí je a vrátí náhradu; nebo napsáním vlastního .toJSON() nahraďte JSON.stringify . Možná budete muset implementovat jeden z těchto přístupů, protože máte vnořené objekty; chování náhrady může být trochu v tomto případě je neklidný
. Možná budete moci vypsat vnořené vlastnosti bezprostředně za nadřazeným objektem, například:
["realName", "type", ...]
ale protože máte stejné názvy pro některé vnořené vlastnosti, může nebo nemusí vám to fungovat. Možná budete muset strunovat vnitřky, než strunujete vnějšek (gah!).
V každém případě doufám, že můj návrh může být prvním krokem.