Express' res.send
methode herkent dat artist
is een Object, en roept JSON.stringify
. aan erop om het object naar een JSON-tekenreeks te converteren voordat het wordt verzonden. Een beetje vereenvoudigend, de JSON.stringify
methode herhaalt zich door je artist
objectsleutels in de volgorde waarin ze zijn gemaakt. (Hier is een link naar de meer gecompliceerde besteluitleg.
) Dat verklaart het huidige gedrag.
Anderen komen misschien met hun eigen voorstellen voor hoe u zou kunnen doen wat u wilt, maar hier is een eenvoudige om eerst te proberen:
-
Doe eerst uw eigen
JSON.stringify
, gebruik een "replacer" om de gewenste uitvoervolgorde te maken :const artistString = JSON.stringify(artist, ["realName", "stageName", ...]) // '{"realName": "Paul David Hewson", "stageName": "Bono", ...}'
-
Gebruik dan
res.json(artistString)
, in plaats vanres.send
, om uw JSON-tekenreeks te verzenden met het juisteContent-Type
kop. (res.send
gaat ervan uit dat je wiltContent-Type: “text/html”
.)
Er zijn zeker meer gecompliceerde benaderingen, waaronder het maken van een functie die sleutels krijgt, sorteert en een vervanger retourneert; of het schrijven van uw eigen .toJSON()
vervanging voor JSON.stringify
. Mogelijk moet u een van deze benaderingen implementeren, omdat u geneste objecten hebt; het gedrag van de vervanger kan een beetje zijn wankel in dit geval
. Mogelijk kunt u de geneste eigenschappen direct na de bovenliggende eigenschappen weergeven, zoals:
["realName", "type", ...]
maar aangezien u voor sommige geneste eigenschappen dezelfde namen heeft, kan dit wel of niet voor u werken. Het kan zijn dat je de binnenkant moet verstrengelen voordat je de buitenkant kunt verstrengelen (gah!).
In ieder geval kan mijn suggestie hopelijk een eerste stap zijn.