1

バックグラウンド

状態をjson表現でサーバーに送信する必要があるオブジェクトがたくさんあります。現在、次のように機能します。

MyClass.prototype.GetJSON(){
    return '{"title":"' + m_Title + '","description":"' + m_Desc + '"}'; 

};

問題

私が一緒に働いている人は、代わりに次のようなことをすることを提案しています:

MyClass.prototype.GetJSON(){
    return JSON.stringify( {title:m_Title, description:m_Desc} ); 

};

このようなことをすることの長所/短所は何ですか? 私がすでに行っていることよりも効率的ですか?

4

4 に答える 4

5

m_Title に JS メタ文字が含まれているとどうなりますか?

m_Title = 'John "Beast" Johnson';

生産

{"title":"John "Beast" Johnson", ...}
                ^^^^^--oops

素敵な構文エラー。コードが引き起こしたパワープラントのメルトダウンについて申し訳ありません。

ホスト言語に JSON を作成する機能がある場合は、手動で JSON を作成しないでください。

これは、SQL インジェクションの問題とまったく同じです。挿入されたテキストが使用されている環境を考慮に入れておらず、何も問題が発生しないと盲目的に想定しています。

于 2013-01-25T16:02:07.343 に答える
2

文字列マッシングよりも JSON ライブラリを使用する利点:

  • コードがより明確に: 読みやすく、デバッグしやすく、コードの目的を理解しやすくなります。
  • 無効な JSON を生成するには、ライブラリの (ありそうもない) バグが必要です

文字列マッシングを使用する利点:

ありません。

于 2013-01-25T16:00:02.463 に答える
1

を使用しJSON.stringifyます。

これは

  • より標準的な
  • 読みやすい:コードが何をするかを確認する必要はありません
  • エスケープする必要があるものを確実にエスケープする

既存のコードを保持していると、文字列に引用符が含まれる日や、現在のアプリケーション ロジックを他の型に拡張しようとする日などに驚きがもたらされます。

IE7 をサポートすることが重要な場合は、ライブラリが必要であることを考慮する必要があります (互換性を参照)。

于 2013-01-25T15:59:27.237 に答える
0

効率はわずかに低下しますが、より標準化されます。さらに、使用stringifyすると注射などを防ぐことができます...

于 2013-01-25T16:00:11.180 に答える