ジャクソンの入力JSONに対する厳密さを軽減する方法はありますか?例えば。 JSONObjectは、次の許容値を提供します。
コンストラクターは、受け入れるテキストでより寛容です。
- 余分な(コンマ)は、閉じ中括弧の直前に表示される場合があります。
- 文字列は '(一重引用符)で引用できます。
- 文字列が引用符または一重引用符で始まらない場合、および先頭または末尾のスペースが含まれていない場合、およびこれらの文字が含まれていない場合、文字列を引用符で囲む必要はありません。{} []/\: 、=; #そしてそれらが数字のように見えない場合、そしてそれらが予約語true、false、またはnullでない場合。*
- キーの後には、=または=>、および:を続けることができます。
- 値の後に;を続けることができます。 (セミコロン)および、(コンマ)。
- 番号には0x-(16進数)プレフィックスを付けることができます。
私にとって最も興味深いのは3番目のポイントです。それは次の変換を可能にします:
new JSONObject("{A : 1}");
...しかし、jacksonの場合、同じ入力jsonでエラーが発生します。
new ObjectMapper().readTree("{ A : 1}"); // throws an exception
例外:
org.codehaus.jackson.JsonParseException: Unexpected character ('A' (code 65)): was expecting double-quote to start field name
at [Source: Java.io.StringReader@26d4f1; line: 1, column: 4]
at org.codehaus.jackson.JsonParser._constructError(JsonParser.Java:943)
at org.codehaus.jackson.impl.JsonParserBase._reportError(JsonParserBase.Java:636)
at org.codehaus.jackson.impl.JsonParserBase._reportUnexpectedChar(JsonParserBase.Java:569)
at org.codehaus.jackson.impl.ReaderBasedParser._handleUnusualFieldName(ReaderBasedParser.Java:342)
at org.codehaus.jackson.impl.ReaderBasedParser._parseFieldName(ReaderBasedParser.Java:235)
at org.codehaus.jackson.impl.ReaderBasedParser.nextToken(ReaderBasedParser.Java:125)
at org.codehaus.jackson.map.deser.BaseNodeDeserializer.deserializeObject(JsonNodeDeserializer.Java:180)
at org.codehaus.jackson.map.deser.BaseNodeDeserializer.deserializeAny(JsonNodeDeserializer.Java:210)
at org.codehaus.jackson.map.deser.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.Java:52)
at org.codehaus.jackson.map.deser.JsonNodeDeserializer.deserialize(JsonNodeDeserializer.Java:13)
at org.codehaus.jackson.map.ObjectMapper._readMapAndClose(ObjectMapper.Java:1588)
at org.codehaus.jackson.map.ObjectMapper.readValue(ObjectMapper.Java:1130)
非標準のJSON(つまり、JSONではないが、サポートできるほど近いもの)の拡張機能のリストは、次の場所にあります。 http://wiki.fasterxml.com/JacksonFeaturesNonStandard
あなたのリストから、(2)と(3)を行うことができます(さらに、commnetのようなリストされていない他のいくつかのこと)。その他はサポートされていません。プロジェクトでは、一般的に使用されるいくつかの拡張機能のサポートが追加されていますが、考慮されるものには制限があります。もちろん、新しい機能を要求することはいつでも可能です。機能は、リクエスト、ユースケースに基づいて追加されます。
私の個人的な意見では、標準に従うか、新しいフォーマットを定義する必要があります。HTMLは、「ほとんどではあるが完全ではない」ものをサポートしようとするときに遭遇するネズミの穴の良い例です。微調整に終わりはなく、相互運用性にも問題があります。標準がないため、すべての実装は、互換性のない機能と構造のサブセットをサポートしています。
this 関連の質問をチェックしてください。 ObjectMapper
を構成して必要なことを実行する方法を示し、それを実行したくない理由についても説明します:)