Express' res.send metoda rozpoznaje, że artist jest obiektem i wywołuje JSON.stringify na nim, aby przekonwertować Object na ciąg JSON przed wysłaniem. Upraszczając nieco, JSON.stringify metoda iteruje przez Twojego artist klucze obiektów w kolejności ich utworzenia. (Oto link do bardziej skomplikowanego wyjaśnienia kolejności.
) To wyjaśnia obecne zachowanie.
Inni mogą przyłączyć się do swoich własnych propozycji, w jaki sposób możesz zrobić to, do czego dążysz, ale najpierw wypróbuj jedną prostą:
-
Najpierw zrób własne
JSON.stringify, używając „zamiennika” do utworzenia żądanej kolejności wyjściowej :const artistString = JSON.stringify(artist, ["realName", "stageName", ...]) // '{"realName": "Paul David Hewson", "stageName": "Bono", ...}' -
Następnie użyj
res.json(artistString), a nieres.send, aby wysłać ciąg JSON z poprawnymContent-Typenagłówek. (res.sendzałożymy, że chceszContent-Type: “text/html”.)
Są zdecydowanie bardziej skomplikowane podejścia, w tym tworzenie funkcji, która pobiera klucze, sortuje je i zwraca zamiennik; lub napisanie własnego .toJSON() zastąp JSON.stringify . Może być konieczne zaimplementowanie jednego z tych podejść, ponieważ masz zagnieżdżone obiekty; zachowanie zamiennika może być trochę chwiejny w tym przypadku
. Możesz mieć możliwość wyświetlenia zagnieżdżonych właściwości bezpośrednio po rodzicu, na przykład:
["realName", "type", ...]
ale ponieważ masz te same nazwy dla niektórych zagnieżdżonych właściwości, może to działać lub nie. Być może będziesz musiał napiąć wnętrze, zanim naciągniesz zewnętrze (gah!).
W każdym razie mam nadzieję, że moja sugestia może być pierwszym krokiem.