15

javaのjavascriptファイルにjsonを入れようとしていますが、jsonを文字列に書き込むと、文字列はjavascriptの有効なjsonではないようです。いくつかのエスケープがありません。(これは、偽のjsonとしてフォーマットしたjsonの文字列で発生しています。)

たとえば、これは私の JavaScript ファイルで有効な json になります。

{
   "message": 
   "the following books failed: [{\"book\": \"The Horse and his Boy\",\"author\": \"C.S. Lewis\"}, {\"book\": \"The Left Hand of Darkness\",\"author\": \"Ursula K. le Guin\"}, ]"
}

ただし、二重引用符がエスケープされていない場合は、次のようになります。

{
   "message": 
   "The following books failed: [{"book": "The Horse and his Boy","author": "C.S. Lewis"}, {"book": "The Left Hand of Darkness","author": "Ursula K. le Guin"}, ]"
}

これを行うと、2番目の結果が得られます。

new ObjectMapper().writer().writeValueAsString(booksMessage);

しかし、jackson を使用してファイルに直接書き込むと、最初の良い結果が得られます。

new ObjectMapper().writer().writeValue(fileToWriteTo, booksMessage);

では、なぜ jackson はファイルに書き込むときに異なる方法でエスケープするのでしょうか? また、文字列に書き込むときにそのようにエスケープするにはどうすればよいでしょうか?

4

3 に答える 3

6

クラスのwriteValue()メソッドはObjectWriter、入力テキストをエンコードします。

ファイルに書き込む必要はありません。同じ文字列を取得する別の方法は次のとおりです。

StringWriter sw = new StringWriter();
new ObjectMapper().writer().writeValue(sw, booksMessage);
String result = sw.toString();
于 2013-11-09T01:01:11.127 に答える
2

追加した

booksJson = Pattern.compile("\\\\").matcher(booksJson).replaceAll("\\\\\\\\");

すべてのエスケープ文字をエスケープします。そうすれば、ファイルに書き込んでエスケープを削除しても、必要なエスケープはまだ残っています。したがって、私の本当の質問は、Java エスケープを削除せずにファイルに書き込む方法であることがわかりました。

于 2013-11-09T03:15:07.050 に答える