Express 'res.send
phương thức nhận dạng artist
đó là một Đối tượng và gọi JSON.stringify
trên đó để chuyển đổi Đối tượng thành chuỗi JSON trước khi gửi. Đơn giản hóa một chút, JSON.stringify
phương thức lặp lại qua artist
của bạn các khóa đối tượng theo thứ tự chúng được tạo. ( Đây là liên kết đến giải thích về thứ tự phức tạp hơn.
) Điều đó giải thích hành vi hiện tại.
Những người khác có thể thích thú với các đề xuất của riêng họ về cách bạn có thể làm những gì bạn đang hướng tới, nhưng đây là một cách đơn giản để thử trước:
-
Trước tiên, hãy làm của riêng bạn
JSON.stringify
, sử dụng "trình thay thế" để tạo đơn đặt hàng đầu ra mà bạn muốn :const artistString = JSON.stringify(artist, ["realName", "stageName", ...]) // '{"realName": "Paul David Hewson", "stageName": "Bono", ...}'
-
Sau đó, sử dụng
res.json(artistString)
, thay vìres.send
, để gửi chuỗi JSON của bạn vớiContent-Type
chính xác đầu trang. (res.send
sẽ giả sử bạn muốnContent-Type: “text/html”
.)
Chắc chắn có nhiều cách tiếp cận phức tạp hơn, bao gồm tạo một hàm nhận các phím, sắp xếp chúng và trả về một bộ thay thế; hoặc viết .toJSON()
của riêng bạn thay thế cho JSON.stringify
. Bạn có thể cần thực hiện một trong những cách tiếp cận này, bởi vì bạn có các đối tượng lồng nhau; hoạt động của trình thay thế có thể là một chút khó khăn trong trường hợp này
. Bạn có thể liệt kê các thuộc tính lồng nhau ngay sau thuộc tính gốc, như:
["realName", "type", ...]
nhưng vì bạn có các tên giống nhau cho một số thuộc tính lồng nhau, điều này có thể hiệu quả với bạn hoặc không. Bạn có thể phải xâu chuỗi bên trong trước khi xâu chuỗi bên ngoài (gah!).
Trong mọi trường hợp, hy vọng gợi ý của tôi có thể là bước đầu tiên.