我有以下对象:
var message = {
default: 'Default',
GCM: {
data: {
title: titleMessage,
text: textMessage
}
}
};
当我意识到:
message.GCM = JSON.stringify(message.GCM);
变量message.GCM获得以下值:
{"data":{"title":"titleMessageValue"}}
而不是:
{"data":{"title":"titleMessageValue", "text":"textMessageValue"}}
为什么忽略数据对象中的第二个变量?如何在不丢失任何变量的情况下进行字符串化?
答案 0 :(得分:6)
textMessage
可能是undefined
。
var msg = {
title: 'titleMessage',
text: 'textMessage'
};
JSON.stringify(msg); // Both properties are there
msg.text = undefined;
JSON.stringify(msg); // `text` is missing
如果在转换过程中遇到未定义,函数或符号,则省略它(当它在对象中找到时)或被删除为null(当它在数组中找到时)。
来源:MDN
答案 1 :(得分:0)
这样可行:
var titleMessage = 'This is my title';
var textMessage = 'This is my message';
var message = {
default: 'Default',
GCM: {
data: {
title: titleMessage,
text: textMessage
}
}
};
message.GCM = JSON.stringify(message.GCM);
但请注意:
var textMessage = undefined;
它不会出现在stringify结果中。textMessage
不存在,则会抛出错误。答案 2 :(得分:0)
使JSON如下:
Array
(
[name] => foo
[email] => bar
)
或者定义两个变量titleMessage和textMessage