1

オブジェクトがあるとしましょう:

person={'name':'john "Garfield"'};

そして、それを文字列に変換します:

JSON.stringify(person);
// RESULT: {"name":"john \"Garfield\""}

そして、その文字列を MySQL などに保存し、後で node.js でその文字列を取得します (インタラクティブ コンソールを使用)。

string = '{"name":"john \"Garfield\""}';
// RESULT: {"name":"john "Garfield""}

次に、オブジェクトを解析します。

JSON.parse(string);
RESULT: SyntaxError: Unexpected token G

保存されたjson文字列化された文字列を解析するにはどうすればよいですか? 私はそれらを MySQL に置いていますが、MySQL ライブラリから要求されると、スラッシュが失われます。

4

2 に答える 2

2

文字列を取得すると、バックスラッシュが「なくなった」ことに気付くはずです。データベースに保存され、データベースから取得された場合、コードは正常に機能するはずです。ただし、その文字列を手動で入力して解析する場合は、バックスラッシュをエスケープする必要があります。

string = '{"name":"John \\"Garfield\\""}';

MySQL の挿入中にバックスラッシュが失われる場合は、挿入する前にエスケープしてみてください。

于 2012-10-13T15:19:15.143 に答える
1

私はこの問題を MySQL の REPLACE で解決しました。なぜこれをこのように行わなければならないのか理解できません。よくわかりますが、node.js と MySQL ライブラリを使用して MySQL を呼び出すこのソリューションは好きではありません。ノードからここに私がしたステートメントがあります:

REPLACE(`field`, "\\\\", "\\\\\\\\") as field2

これはばかげているように見えますが、ノードで文字列を宣言すると、自動的にエスケープ解除されます。

string = 'REPLACE(`field`, "\\\\", "\\\\\\\\") as field2';

これになります:

REPLACE(`field`, "\\", "\\\\") as field2

を MySQL が受け取ると、次のようになります。

REPLACE(`field`, "\", "\\") as field2

私はそれが別の方法でなければならないと感じています!

于 2012-10-13T21:15:25.397 に答える