1

私は Firefox 拡張機能に取り組んでおり、JSON オブジェクトを文字列化しようとしています。

このstringify 関数を使用していますが、次のエラーが発生します。

Could not convert JavaScript argument "NS_ERROR_XPC_BAD_CONVERT_JS"

オブジェクト内の最初のレベルまたは 2 つまたはプロパティを本当に気にするだけで、メソッド/関数は気にしません。これらすべてが必要ない場合、オブジェクトを文字列化する簡単な方法はありますか?

これが私が使用しているコードのビットです:

    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 コンソール ウィンドウからコピーできたものです。

http://pastebin.com/KPXceRag

オブジェクトのスクリーンショットは次のとおりです。

画像 http://img143.imageshack.us/img143/2603/pictureos.png

4

1 に答える 1

1

toJSON()必要なオブジェクトの要素のみを返す、呼び出されたオブジェクトにカスタム関数を定義できます。やや直観に反しますが、toJSON関数は JSON 文字列を返すべきではありません。の入力として使用する必要があるものを表すオブジェクトを返すだけですJSON.stringify

例えば:

// an object with some attributes you want and some you don't
var o = {
    a:"value1", 
    b:"value2", 
    doCalc: function() { return this.a + " " +  this.b } 
};
// define a custom toJSON() method
o.toJSON = function() { 
    return {
        a:this.a, 
        calc: this.doCalc() 
    } 
};

JSON.stringify(o); // '{"a":"value","calc":"value1 value2"}'

gContextMenuあなたの場合、 を呼び出す前に、このメソッドをオンザフライで定義できるはずですJSON.stringify。これには、必要なものと不要なものを明示的に定義する必要がありますが、より良い方法はないと思います。

編集:メソッド以外のすべての値をプルしたい場合は、次のようなものを試すことができます:

o.toJSON = function() { 
    var attrs = {};
    for (var attr in this) {
        if (typeof this[attr] != "function") {
            attrs[attr] = String(this[attr]); // force to string
        }
    }
    return attrs;
};

おそらく、いくつかの属性が に設定される"[object Object]"ことになりますが、検査だけが必要な場合、これはおそらく問題にはなりません。typeof this[attr] == "string" || typeof this[attr] == "number"これらのタイプの属性のみを取得するかどうかを確認することもできます。

于 2011-09-01T21:35:37.730 に答える