2010-12-28 8 views
5

を維持jsonであり、文字列として扱うだけです)。図書館の情報源を調べると、醜いハッキングがなければその方法を見つけることができません。JSON-libのエスケープ/私はちょうどJSONのように見えることができます(しかし、私は、ライブラリが、それは可能性があることを自動的に把握する必要がない単純な文字列を追加するJava <a href="http://json-lib.sourceforge.net" rel="nofollow">http://json-lib.sourceforge.net</a></p> <p>ためにJSON-libのライブラリを使用していた文字列

例:

JSONObject object = new JSONObject(); 
String chatMessageFromUser = "{\"dont\":\"treat it as json\"}"; 
object.put("myString", chatMessageFromUser); 

object.toString(){"myString":{"dont":"treat it as json"}}

私たちに与えるだろうと私はちょうど{"myString":"{\"dont\":\"treat it as json\"}"}

どのようにソースコードを変更せずに、それを達成するためにしたいですか?私はこのコードをユーザーからのチャットメッセージの転送に使用しています - 通常のチャットメッセージでは正常ですが、ユーザーがJSON形式をメッセージとして入力すると、ここで説明するJSON-libのデフォルト動作が原因で破損します。

答えて

4

json-simpleは、JSONObject.escape()メソッドを提供します。

+0

json-simpleでアプリケーションを書き直しただけで、うまく動作します。エスケープする必要はありません。デフォルトでは、stringは文字列として扱われ、JSONとして解析されません。人生はjson単純なのでとてもシンプルです。 –

5

私が正しく質問を理解すると、json-libは解析される必要のある文字列が渡されるという前提の中で一意であると思います。他のライブラリは通常、それを文字列として扱います(必要に応じて二重引用符とバックスラッシュをエスケープします)。つまり、期待通りに動作します。

他のライブラリを検討することをお勧めします。Jacksonをお勧めします.Gsonも動作します。

+0

正しい場合、json-libは常に最初に文字列を解析します。 if(JSONUtils.isString(value)){ String str = String.valueOf(value); if(JSONUtils.hasQuotes(str)){ 文字列の破棄= JSONUtils.stripQuotes(str); IF(JSONUtils.isFunction(剥離)){... } IF(stripped.startsWith( "[")&& stripped.endsWith( "]")){... }場合(剥離。 startsWith( "{")&& stripped.endsWith( "}")){ ... } return str; } –

+0

これはかなり面白いアプローチです...私にとっては直感的ではないようですが、おそらくそれはjson-libの作者のユースケースでうまくいきました。 – StaxMan

+0

私の質問ごとhttp://stackoverflow.com/questions/6155560/how-to-force-json-libs-jsonobject-put-to-escape-a-string-containing-json - 私たちは絶対にそこには道がないと確信していますか? JSON-libでこの動作を実現しますか?私は本当にそのデポを交換することを避けたいと思います。 –

関連する問題

 関連する問題