使用JSON.stringify转换关联数组的问题

时间:2013-05-09 15:25:39

标签: javascript json

仅当关联数组通过文字定义以编程方式附加时才会出现此问题。在文字定义上使用stringify可以正常工作。

试图理解,我用它来测试文字定义。

var test = {
    voice : { state : 'Ready' }
};
console.log('Stringify test: ' + JSON.stringify(test));

输出正是我所期望的:

Stringify test: {"voice":{"state":"Ready"}}

当我以编程方式初始化它时,不会发生这种情况。我应该提到变量是我创建的对象的私有成员,它具有访问器/ getter方法。在构造函数中,我有:

var states = {};

this.getStates = function()
{
    return states;
}

this.setState = function(newState, mediaType)
{
    states[mediaType] = newState
}

现在我运行相同的测试。

customObj.setState('{ state: 'Ready' }', 'voice');
var test = customObj.getStates();

console.log('Stringify test: ' + JSON.stringify(test));

输出不是我所期望的:

Stringify Test: []

最后,我仔细检查测试变量的含义:

for(var x in test)
{
    console.log('State in test: ' + x);
    console.log('Value of ' + x + ': ' + JSON.stringify(test[x])); 
}

然后我得到了:

State in test: voice
Value of voice: {"state":"Ready"}

好的,所以告诉我它包含了我所期待的内容,但是stringify()不会格式化它。 现在,我对发生的事情感到有些困惑。

1 个答案:

答案 0 :(得分:2)

我不确定您是如何创建customObj的,但以下是有效的:

var CustomObj = function () {
    var states = {};

    this.getStates = function()
    {
        return states;
    }

    this.setState = function(newState, mediaType)
    {
        states[mediaType] = newState
    }
};

var customObj = new CustomObj();
customObj.setState({ state: 'Ready' }, 'voice');

var test = customObj.getStates();
console.log('Stringify test: ' + JSON.stringify(test));

输出:

Stringify test: {"voice":{"state":"Ready"}}