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-Type
záhlaví. (res.send
př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.