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

Cra*_*gan 1 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]
Run Code Online (Sandbox Code Playgroud)

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

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

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

Bar*_*ney 5

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

\n\n

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

\n\n
var test = [];\ntest.prop = \'foo\';\nconsole.log(test);   // [prop: "foo"] \ntest                 // []\nJSON.stringify(test) // "[]"\n
Run Code Online (Sandbox Code Playgroud)\n\n

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

\n\n
var test = {};\ntest.prop = \'foo\';\nconsole.log(test);   // Object {prop: "foo"}\ntest                 // Object {prop: "foo"}\nJSON.stringify(test) // "{"prop":"foo"}"\n
Run Code Online (Sandbox Code Playgroud)\n\n

从你所说的来看,它似乎从来没有打算成为event一个数组,所以我建议你确保在将所有这些属性分配给它之前将其实例化为一个对象:

\n\n
var event = {};\n
Run Code Online (Sandbox Code Playgroud)\n