Spring Frameworkとの統合のためにJacksonを使い始めたばかりで、値の一重引用符で問題が発生しました。ページのjQueryでJSONを解析しようとすると、JavaScriptエラー"SyntaxError: missing) after argument list"
が発生します。私はGsonを使用してオブジェクトをシリアライズしていましたが、Gsonが一重引用符をUnicode \ u0027に置き換えてしまうため、この問題は発生しません。ジャクソンのシリアル化で一重引用符が正しく処理されない
たとえば、
のJava
public final class Person {
private String firstName;
private String lastName;
public Person() {}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getFirstName() {
return firstName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
public String getLastName() {
return lastName;
}
}
ジャクソン でJSON
Gson [{"person":{"firstName":"James","lastName":"O\u0027tool"}}]
はJavaScriptで [{"person":{"firstName":"James","lastName":"O'tool"}}]
。
// This is where the JavaScript fails with the Jackson serialized object
$.parseJSON('${requestScope.person}');
私は解決策を探しましたが、見つけられませんでした。 Gsonが行うのと同じ方法でシングルクォートを処理するようにジャクソンを設定することができるかどうかは知っていますか?
ありがとうございます。
JSONを文字列リテラル(もちろんエスケープ)に出力して解析しないでください。ただオブジェクトリテラルを出力してください! – Bergi
申し訳ありませんが、これはajax呼び出しではなく、JSONオブジェクトの解析がJSPで行われることを含めるのを忘れていました。これがまっすぐなアヤックスコールだった場合、問題はありません。 – Jason
いいえ、間違ってエスケープされたJSON文字列をJavaScript(JSPではなく)で解析しようとしています – Bergi