Express' res.send
El método reconoce que artist
es un objeto y llama a JSON.stringify
en él para convertir el objeto en una cadena JSON antes de enviarlo. Simplificando un poco, JSON.stringify
el método itera a través de su artist
claves de objeto en el orden en que fueron creadas. (Aquí hay un enlace a la explicación de pedidos más complicada.
) Eso explica el comportamiento actual.
Es posible que otros participen con sus propias propuestas sobre cómo podría hacer lo que busca, pero aquí hay una simple para probar primero:
-
Primero, haz tu propio
JSON.stringify
, utilizando un "reemplazador" para crear el orden de salida que desea :const artistString = JSON.stringify(artist, ["realName", "stageName", ...]) // '{"realName": "Paul David Hewson", "stageName": "Bono", ...}'
-
Luego, usa
res.json(artistString)
, en lugar deres.send
, para enviar su cadena JSON con elContent-Type
correcto encabezamiento. (res.send
asumirá que deseaContent-Type: “text/html”
.)
Definitivamente, existen enfoques más complicados, incluida la creación de una función que obtiene claves, las ordena y devuelve un reemplazo; o escribiendo su propio .toJSON()
sustituir por JSON.stringify
. Es posible que deba implementar uno de estos enfoques, porque tiene objetos anidados; el comportamiento del sustituto puede ser un poco raro en este caso
. Es posible que pueda enumerar las propiedades anidadas inmediatamente después del padre, como:
["realName", "type", ...]
pero dado que tiene los mismos nombres para algunas propiedades anidadas, esto puede o no funcionar para usted. Es posible que tengas que enhebrar el interior antes de enhebrar el exterior (¡vaya!).
En cualquier caso, espero que mi sugerencia pueda ser un primer paso.