JSON.stringify()无法正常工作 - 第二个参数消失

时间:2016-01-08 20:49:23

标签: javascript node.js

我有以下对象:

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"}} 

为什么忽略数据对象中的第二个变量?如何在不丢失任何变量的情况下进行字符串化?

3 个答案:

答案 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