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-Typecorrecto encabezamiento. (res.sendasumirá 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.