6

JSON は JavaScript のサブセットではありません。出力が 100% 有効な JavaScript である必要があります。それはそのように評価されます-つまり、JSON.stringify(常に) 私のニーズに合うとは限りません。

Node用のJavaScript文字列化機能はありますか?

おまけとして、オブジェクトを文字列化できればいいのですが。

4

2 に答える 2

12

JSON.stringify残りの U+2028 および U+2029 文字を使用して、後で置き換えることができます。リンクされた記事にあるように、文字は文字列でのみ発生する可能性があるため、文字を置き換える必要がない場所で文字を置き換えることを心配することなく、エスケープされたバージョンで安全に置き換えることができます。

JSON.stringify('ro\u2028cks').replace(/\u2028/g,'\\u2028').replace(/\u2029/g,'\\u2029')
于 2013-04-14T23:25:03.760 に答える
1

リンクした記事の最後の段落から:

ソリューション

幸いなことに、解決策は簡単です。JSON 仕様を見ると、U+2028 または U+2029 が発生する唯一の場所が文字列内にあることがわかります。したがって、JSONP を送信する必要があるときはいつでも、すべての U+2028 を \u2028 (エスケープ シーケンス) に、U+2029 を \u2029 に置き換えるだけです。

Rack::JSONP ではすでに修正されており、JSONP を送信するすべてのフレームワークまたはライブラリで同じことを行うことをお勧めします。これはほとんどの言語で 1 行のパッチであり、結果は 100% 有効な JSON のままです。

于 2013-04-14T22:28:12.813 に答える