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-Type
nagłówek. (res.send
zał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.