JSON 字符串化对象(不包括方法)
我正在开发 Firefox 扩展,并尝试对 JSON 对象进行字符串化。
我正在使用这个 stringify 函数 但我收到此错误:
无法转换 JavaScript 参数“NS_ERROR_XPC_BAD_CONVERT_JS”
我真的只关心对象内的第一级或第二级或属性,而不关心方法/函数。如果我不需要所有这些,是否有更简单的方法来字符串化对象?
这是我正在使用的代码:
var s=JSONstring.make('abc');
try{
Firebug.Console.log(gContextMenu);
s = JSON.stringify(gContextMenu);
Firebug.Console.log(s);
}catch(e){
Firebug.Console.log('error');
Firebug.Console.log(e);
}
var s=JSONstring.make('abc');
Firebug.Console.log(s);
Firebug.Console.log(gContextMenu);
这是控制台窗口中的错误:
这是我能够从 Firebug 控制台窗口中复制出来的内容:
这是该对象的屏幕截图:
I'm working on a Firefox extension and I'm trying to stringify a JSON object.
I'm using this stringify function but I'm getting this error:
Could not convert JavaScript argument "NS_ERROR_XPC_BAD_CONVERT_JS"
I really just care about the first level or two or properties inside the object, and I don't care about the methods / functions. Is there a simpler way to stringify an object if I don't need all this?
Here's the bit of code I'm using:
var s=JSONstring.make('abc');
try{
Firebug.Console.log(gContextMenu);
s = JSON.stringify(gContextMenu);
Firebug.Console.log(s);
}catch(e){
Firebug.Console.log('error');
Firebug.Console.log(e);
}
var s=JSONstring.make('abc');
Firebug.Console.log(s);
Firebug.Console.log(gContextMenu);
Here is the error in the console window:
This is what I was able to copy out of the Firebug console window:
Here is a screenshot of the object:
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您可以在对象上定义一个名为
toJSON()
的自定义函数,该函数仅返回所需对象的元素。有点违反直觉的是,您的toJSON
函数不应该返回 JSON 字符串 - 它只返回一个对象,表示应用作JSON.stringify< 的输入的内容/代码>。
例如:
在您的情况下,您应该能够在调用
JSON.stringify
之前为gContextMenu
动态定义此方法。这确实需要你明确定义你想要什么和不想要什么,但我认为没有更好的方法。编辑:如果您想提取所有非方法值,您可以尝试如下操作:
您可能最终会将一些属性设置为
“[object Object]”
,但如果您想要的只是检查,这可能不是问题。您还可以尝试检查typeof this[attr] == "string" || typeof this[attr] == "number"
如果您只想获取这些类型的属性。You can define a custom function on your object called
toJSON()
that returns only the elements of the object you want. Somewhat counter-intuitively, yourtoJSON
function should not return a JSON string - it just returns an object representing what should be used as the input forJSON.stringify
.For example:
In your case, you should be able to define this method for
gContextMenu
on the fly, before callingJSON.stringify
. This does require you to explicitly define what you want and don't want, but I don't think there's a better way.Edit: If you want to pull all non-method values, you could try something like this:
You will probably end up with a few attributes set to
"[object Object]"
, but if all you want is inspection, this probably isn't an issue. You could also try checking fortypeof this[attr] == "string" || typeof this[attr] == "number"
if you wanted to get only those types of attributes.