48

JSON で日付を送信する必要があります。日付文字列は次のようになります。

「2013/5/15」

代わりに、次のようにJSONObject.toStringエスケープします。

「2013\ /5\ /15」

この質問が説明しているように、スクリプトタグ内でjson文字列を許可するためにこれが行われていることを理解しています: JSON: なぜフォワードスラッシュがエスケープされるのですか?

しかし、私の場合、私はそれを必要としません。実際、サーバーはエラーを返しています。サーバーはこれを処理しておらず、サーバーを修正できないため、モバイル クライアント コードで修正する必要があります。

シリアル化した後に実行することもできますString.replaceが、JSON の他の部分に "\ /" 文字列を実際に含めたい場合はどうすればよいでしょうか?

スラッシュをエスケープせずに JSON オブジェクトをシリアル化する方法はありますか? (できれば何もエスケープせずに)

前もって感謝します。

4

5 に答える 5

10

私は最終的に、サーバーに送信する前に、シリアル化された文字列内のエスケープされたスラッシュを置き換えるという、手早く汚いトリックを選択しました。幸いなことに、JSONObject はバックスラッシュもエスケープするので、バックスラッシュもエスケープする必要があります。意図的に「\ /」を送信したい場合、エスケープされた文字列は「\\/」になり、置換の結果は意図した元の文字列になります。

于 2013-05-15T12:14:57.743 に答える
6
jsonObjSend.toString().replace("\\\\","")

私のために働いた。少し汚いトリックですが、他の解決策はないようです。

于 2015-03-17T18:56:04.490 に答える
5

その動作はJSONStringer.javaにハードコードされています。 methodprivate void string(String value)の 302 行目以降を参照してください。

クラスをコピーJSONStringerして、独自のバージョンのvalue(Object)(227 行目以降) を実装できるはずです。次に、独自のバージョンのJSONObject .toString() をユーティリティ クラスに実装し、オリジナルの代わりに独自の JSONStringer を使用します。

編集: value() はアクセスできないプライベートメソッド beforeValue() を呼び出すため、JSONStringer のサブクラス化は簡単ではありません。

于 2013-05-15T12:03:25.493 に答える