将对象转换为json时,JSON.stringify返回[]

时间:2013-12-23 17:07:03

标签: javascript json

我正在努力创建一个通过网络发送的JSON对象。有问题的数组在Chrome调试器中看起来像这样。

event: Array[0]
        $$hashKey: "02Q"
        bolFromDB: 1
        bolIndoor: null
        classId: 41
        curValue: "7.1000"
        curWeightHeight: ""
        datDate: "2013-01-13T01:00:00.000Z"
        exists: true
        id: "10"
        idClass: "W"
        idEvent: "60M"
        length: 0
        ownEvents: true
        ownSex: true
        pbs: undefined
        selected: true
        strAdditional: ""
        strName: "60m"
        strTown: "Stadtallendorf"
__proto__: Array[0]

这是一个更大的对象数组的一小部分,但是在尝试将问题分解为它的最小部分时,这似乎是该行的结束。

调用JSON.stringify(event)时,返回的值为[]

我期待{$$hashKey: "02Q",bolFromDB: 1, bolIndoor: null, ... etc }

1 个答案:

答案 0 :(得分:4)

看起来您的event对象已初始化为数组,然后被分配了字母数字键控属性。 JavaScript Arrays将接受非数字键,但JSON解析器将忽略这些键,因为JSON必须对Arrays使用方​​括号表示法,因此数字键是隐式的 - 使用方括号表示法无法表达命名属性。

Zach L写了几个测试来验证这个断言:

var test = [];
test.prop = 'foo';
console.log(test);   // [prop: "foo"] 
test                 // []
JSON.stringify(test) // "[]"

这是显示空数组的JSON。但是,当我们从一个对象开始时:

var test = {};
test.prop = 'foo';
console.log(test);   // Object {prop: "foo"}
test                 // Object {prop: "foo"}
JSON.stringify(test) // "{"prop":"foo"}"

从你的意思来看,它似乎永远不会让event成为一个数组,所以我建议你确保在为它分配所有这些属性之前将其实例化为一个对象:

var event = {};