无法解析 JSON 对象、Stringify 或获取 javascript 属性

Can't parse JSON Object, Stringify or get javascript property

本文关键字:Stringify 获取 javascript 属性 对象 JSON      更新时间:2023-09-26

我正在使用一个为我提供此变量的火狐插件:

[{errorMessage:"TypeError: a is null", sourceName:"http://pagead2.googlesyndication.com/pagead/js/graphics.js", 
lineNumber:17, console:null}]

从Firebug中,我可以看到这个变量及其称为"e"。

我可以输入 e,然后按上面打印。

如果我输入 e.toString();我明白,

[对象对象]

如果我键入 e.errorMessage,它是未定义的。

如果我键入 JSON.parse(e),我会收到意外的字符错误。

如何从此对象中获取信息?似乎我对它所做的任何事情,它都只返回 [对象对象] 或未定义。

我已经尝试了JSON.parse,JSON.stringify,遍历它,没有任何内容为我提供实际的对象信息。

这是一个包含对象的数组,请尝试以下操作:

e[0].errorMessage;
这不是

JSON。它是一个 JavaScript 数组。它与JSON没有任何关系。

要访问 JavaScript 数组,只需使用普通的 JavaScript 代码,而不是JSON.parse或类似的东西。

您可以使用JSON.stringify()将此数组转换为 JSON,但这肯定不是您想要的。

e.toString()打印[object Object]的原因很简单,这就是 .toString() 方法为对象或数组返回的内容。 .toString()并不总是给出有用的结果。

将以下内容粘贴到 Firebug 或 Chrome 控制台中,然后查看其记录的内容:

var e = [
    {
        errorMessage: "TypeError: a is null",
        sourceName: "http://pagead2.googlesyndication.com/pagead/js/graphics.js",
        lineNumber: 17,
        console:null
    }
];
console.log( e.length );
console.log( e[0] );
console.log( e[0].errorMessage );
console.log( e[0].sourceName );
console.log( e[0].lineNumber );

来自JSON规范:[RFC 4627][1]

2.2. 对象

对象结构表示为一对大括号围绕零个或多个名称/值对(或成员)。名称是一个字符串。 每个名称后都有一个冒号,用于分隔名称从值。单个逗号将值与后面的值分开名字。 对象中的名称应该是唯一的。

2.5. 字符串

字符串以引号开头和结尾。

<小时 />

在官方的 ECMAScript 规范中:

它定义了一个对象文本,属性名称和值可以是字符串文本或标识符文本。和标识符文字,没有引号。

不带引号的键名称是合法的,在Javascript中是允许的,但它们不是有效的JSON。

<小时 />

http://jsonlint.com

[
    {
        errorMessage: "TypeError: a is null",
        sourceName: "http://pagead2.googlesyndication.com/pagead/js/graphics.js",
        lineNumber: 17,
        console: null
    }
]

结果

Parse error on line 3:
...a is null",        sourceName: "http://
----------------------^
Expecting 'STRING'