0

JSON に入力する必要があるデータベースからの文字列値を取得しましたが、値には一重引用符と二重引用符を含めることができます。簡単に聞こえますよね?どうやら Java 1.4.2 にはありません。なぜ 1.4.2 にしなければならないのかを説明しないでください。私はこれを別の開発者から継承しましたが、私の制御が及ばない要因により、このプロジェクトをまだ更新できません。:)

だから、私はこれらすべてを試しました(そして結果を見るためだけに他の多くのものを試しました):

"sample user's string".replaceAll("'", "\'")      // returns "sample user's string"
"sample user's string".replaceAll("'", "\\'")     // returns "sample user's string"
"sample user's string".replaceAll("'", "\\\'")    // returns "sample user's string"
"sample user's string".replaceAll("'", "\\\\'")   // returns "sample user\\'s string"
"sample user's string".replaceAll("'", "%%")      // returns "sample user%%s string"

私が欲しいのはsample user\'s string、何が間違っているのですか?残念ながら 1.4.2 には String.replace(String,String) 関数がありません。

編集: json-simpleJSON ライブラリを使用しており、結果の JSON 文字列で上記のコマンドの出力を見ていました。JSON が出力される前に値を確認するために追加のデバッグ情報を追加しました。上記のコマンドは実際に機能しているように見えますが、json-simpleライブラリはエスケープ文字を削除しています。

だから、私が見ているのは:

"sample user's string".replaceAll("'", "\\\\'")    // sample user\'s string
myJSONObject.put("value", "sample user's string".replaceAll("'", "\\\\'")) // sample user\\'s string"
myJSONObject.put("value", "sample user's string") // sample user's string

そのため、ライブラリは期待どおりに機能していないようです。これを使用したことのある人json-simpleは、これに対する回避策を知っていますか?

4

1 に答える 1

3

バックスラッシュを自動的にエスケープするコンテキストで文字列を見ているのではないかと思います。最後から 2 番目のサンプルは問題ないはずです。例えば:

public class Test {
    public static void main(String[] args) {
        System.out.println("sample user's string".replaceAll("'", "\\\\'"));
    }
}

版画:

sample user\'s string

値をどこで見ているのかは言いませんでしたが、デバッガーにある場合は、値をJavaリテラルにあるかのように表示するために、バックスラッシュを2倍にしている可能性があります。

ただし、理想的には、この種のことを手動で行うべきではありません。エラーが発生しやすいためです。これらすべてを処理する JSON ライブラリを使用する必要があるため、値を指定するだけで済みます。

于 2012-09-17T20:11:43.237 に答える