JSONとのシリアル化/逆シリアル化にjacksonライブラリを使用しています。 JSONのサイズができるだけ小さいので、ALLOW_UNQUOTED_FIELD_NAMES機能を有効にしてすべての引用符を削除する必要があります。引用符を削除することは標準のjsonではないことがわかりますが、jsonを小さくすることはプロジェクトの難しい要件です。 JSONの作品を生成したが、私は、私は例外を取得していたJSON値を読み取ろうとしたら:JackonのALLOW_UNQUOTED_FIELD_NAMES JSONライブラリ
org.codehaus.jackson.JsonParseException: 予期しない文字(「9」(コード57)): は、いずれかの有効な名前に (引用符で囲まれていない名前のための)文字や 二重引用符(引用されたため)[ソースで フィールド名を開始するには期待していた: [email protected]を。行:1、 カラム:私はこのJSONを読んだとき3]
は、上記例外がスローされます。私はそれを読む
{90110a2e-febd-470f-afa4-cf7e890d31b9:0,eec652ad-a4d9-4eb1-8d24-7c1a0c29449f:1}
方法がある:
Map<String, Object> valuesMap = oM.readValue(json, new TypeReference<Map<String, Object>>() {});
とオブジェクト私が値の読み書きに使用するマッパーは次のとおりです。
private static final ObjectMapper om = new ObjectMapper();
static {
om.configure(JsonGenerator.Feature.QUOTE_FIELD_NAMES, false);
om.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
om.configure(SerializationConfig.Feature.WRITE_DATES_AS_TIMESTAMPS, true);
om.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
om.getSerializationConfig().setSerializationInclusion(JsonSerialize.Inclusion.NON_NULL);
}
私は送信者プロジェクトと受信者プロジェクトの両方でJacksonのバージョン1.6.3を使用しています。この機能のために必要なバージョンは1.2+ですので、私はこのバージョンを使用していないかもしれないと思ったのですが、受信機はSpringアプリケーションで、libsフォルダにインストールされているライブラリが1.6.3であることを確認しました。
何が間違っている可能性がありますか?たぶん、この機能をマップで使用することはできません。
私は別の質問があります。これまでのところ、キーは単なるuuid値で、値は数値です。 ALLOW_UNQUOTED_FIELD_NAMES機能のある特殊文字を使用して値を送信すると問題はありますか?ジャックソンはこの文字をエスケープするのだろうか?
ありがとうございました。
スマイルについての非常に良い点 - コンパクトにすることができます。文字列値の後ろ参照を有効にするとき(列挙された値のような多くの繰り返し文字列値がある場合) – StaxMan