JavaScript中的Stringify函数

时间:2014-05-05 08:17:59

标签: javascript json

我想写的是这样的。

Object.prototype.toString = function(){
var ret = '{';
for(var i in this){
    if(this[i].toString)
    ret = ret + ( '"'+i+'":' + this[i].toString())
}
ret=ret+'}'; return ret;
}

我将为Number和其他已知的dataTypes执行此操作。

我已经看到很多utils.stringify函数和JSON.stringify,所有这些库正在做的是,它们正在检查对象的类型,并基于它们连接字符串来创建Json。没关系,我不能使用这些功能,因为我想使用这样的东西: -

function subMap(){
    this.data = { a  : 'A', b : 'B'}
    this.toString = function(){
         return  this.data.toString()
    }
}
utils.parse(({
   x : new subMap()
}).toString())

应返回类似这样的内容

"{"x":{"a":"A","b":"B"}}"

基本上我希望每当我添加新的DataType时,我都可以决定如何为任何ObjectType表示StringFormat(JSON)。

但是看看所有可用的libs,我看到没有人这样做(定义toString函数),我认为这是更好的方法。是否有任何缺点或JavaScript在内部使用它来做一些会破坏某些东西或其他任何不使用它的原因?

修改

我找到了答案。在链接 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

function subMap(){
    this.data = { a  : 'A', b : 'B'}
    this.toJSON = function(){
         return this.data;
    }
}

应该像我期望的那样工作。

2 个答案:

答案 0 :(得分:1)

您可以使用JSON.stringify(value, replacer, space)的第二个参数执行此操作:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

答案 1 :(得分:0)

尝试使用toJSON

function subMap(){
    this.data = { a  : 'A', b : 'B'}
    this.toJSON = function(){
         return this.data;
    }
}

这可能会解决您的问题