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:

You can define a custom function on your object called
toJSON()that returns only the elements of the object you want. Somewhat counter-intuitively, yourtoJSONfunction 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
gContextMenuon 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.