【发布时间】:2015-05-04 01:55:02
【问题描述】:
有没有办法让我的替换器在对象自己的toJSON 转换它之前,这样我就可以使用原始对象而不是它的 JSON 友好形式, 覆盖对象或其原型上的toJSON,预处理对象,还是编写我自己的JSON.stringify 版本?
例如:假设我想要序列化 Date 实例,而不是它们的正常序列化 (which is toISOString)。 (这个问题不是特定于Date,这只是一个例子。)问题是,我的替换器没有看到Date 对象,它看到了一个字符串(参见sn-p下面)因为Date.prototype.toJSON 被称为在我的替代者之前。
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>
有没有办法先调用替换器?我不想覆盖Date.prototype.toJSON、预处理对象或编写我自己的JSON.stringify,但我没有看到其他方式。
【问题讨论】:
标签: javascript json stringify