Có cách nào để thay thế tôi gọi trước của một đối tượng riêng toJSON
biến đổi nó, vì vậy mà tôi có thể làm việc với các đối tượng ban đầu chứ không phải là hình thức JSON-thân thiện, mà không trọng các toJSON
trên đối tượng hoặc nguyên mẫu của nó , xử lý trước đối tượng hoặc viết phiên bản JSON.stringify
của riêng tôi?Gọi replacer * trước * đối tượng toJSON?
Ví dụ: Giả sử tôi muốn tuần tự hóa Date
trường hợp khác với phiên bản thường hóa của chúng (which is toISOString
). (Câu hỏi này là không cụ thể để Date
, đây chỉ là một ví dụ.) Vấn đề là, thay thế tôi không thấy đối tượng Date
, nó thấy một chuỗi (xem đoạn mã dưới đây) vì Date.prototype.toJSON
được gọi trước replacer của tôi .
var obj = {
d: new Date()
};
snippet.log(getType(obj.d)); // "[object Date]"
var json = JSON.stringify(obj, function(key, value) {
if (key === "d") {
snippet.log(getType(value)); // "string" <== Want to see a Date here
}
return value;
});
function getType(value) {
var to = typeof value;
if (to === "object") {
to = Object.prototype.toString.call(value);
}
return to;
}
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
Có cách nào để có được những thay thế được gọi là đầu tiên? Tôi không muốn ghi đè lên Date.prototype.toJSON
, xử lý trước đối tượng hoặc viết JSON.stringify
của riêng tôi, nhưng tôi không thấy cách khác.
Đẹp. Nó thậm chí [làm việc cho trường hợp đặc biệt] (http://jsbin.com/zeciqiwawo/1), nơi bạn đang xâu chuỗi một đoạn tài liệu ('JSON.stringify (new Date())'), không phải là toàn bộ tài liệu, nhờ đến [bước 9-11] (http://www.ecma-international.org/ecma-262/5.1/#sec-15.12.3). –
thực sự đẹp .. –