我想通过$ .ajax请求发送像这样的javascript对象:
var o = {
a: 1,
b: 'dummy string',
c: ['a', 1, {}],
d: {dd: 1},
e: new Date(),
f: function() {
console.log('here');
}
}
我知道我通常应该在将它发送到我的php脚本之前使用JSON.stringify。问题是JSON.stringify,删除它无法进行字符串化的属性:
JSON.stringify(o);
returns this ->
"{
"a":1,
"b":"dummy string",
"c":["a",1,{}],
"d":{"dd":1},
"e":"2015-11-13T21:34:36.667Z"
}"
但是我要做什么,如果我想在mysql专栏中存储像这样的“o”javascript对象作为纯文本:
o = {
a: 1,
b: 'dummy string',
c: ['a', 1, {}],
d: {dd: 1},
e: new Date(),
f: function() {
console.log('here');
}
}
答案 0 :(得分:3)
你可以试试这个:
var o = {
a: 1,
b: 'dummy string',
c: ['a', 1, {}],
d: {dd: 1},
e: new Date(),
f: function() {
console.log('here');
}
};
o.f = o.f.toString();
var stringy = JSON.stringify(o);
document.getElementById('test2').innerHTML = stringy;
小提琴:http://jsfiddle.net/e2cxandt/
显然这需要稍微更改,所以你不要通过克隆对象来覆盖函数,但作为一个简单的例子,你可以看到它现在在字符串中有属性。
正如上面评论中提到的那样,war10ck,这里是使用JSON.stringify的replacer参数的一个例子
var o = {
a: 1,
b: 'dummy string',
c: ['a', 1, {}],
d: {dd: 1},
e: new Date(),
f: function() {
console.log('here');
}
};
function replacer (key, value) {
if (typeof value === "function") {
return value.toString();
}
return value;
}
var stringy2 = JSON.stringify(o, replacer);
document.getElementById('test2').innerHTML = stringy2;
答案 1 :(得分:1)
一些通用(非特定实例)选项:
您可以在任何对象上定义custon toJSON:
Function.prototype.toJSON=function(){return String(this);};
JSON.stringify({a:1, b:function(){alert(123)}});
显示:
{"a":1,"b":"function (){alert(123)}"}
一个警告是,您的函数文字被引用为字符串而不再是函数。如果需要,可以使用reviver参数来修复JSON.parse()。
更好的选择:
使用替换arg到JSON.stringify()
:
JSON.stringify({a:1, b:function(){alert(123)}}, function(k,v){
if(typeof v==="function") return String(v);
return v;
});
显示:
{"a":1,"b":"function (){alert(123)}"}
这种方式特别好,因为您无需修改内置对象或实例对象。