0

json 応答を手動で生成するサーバー側の操作があります。json 内には、文字列値を含むプロパティがあります。

この json の結果に含まれる文字列値をエスケープする最も簡単な方法は何ですか?

したがって、この

string result = "{ \"propName\" : '" + (" *** \\\"Hello World!\\\" ***") + "' }";

に変わるだろう

string result = "{ \"propName\" : '" + SomeJsonConverter.EscapeString(" *** \\\"Hello World!\\\" ***") + "' }";

そして、次のjsonになります

{ \"propName\" : '*** \"Hello World!\" ***' }
4

2 に答える 2

1

まず、シリアライゼーションを手動で実装するという考えは良くありません。これは、ほとんどの場合、学習目的または標準の .NET クラスを使用できない非常に重要な理由がある場合にのみ行う必要があります (たとえば、.NET 1.0-3.0 以降を使用する必要があるなど)。

コードに戻ります。現在生成している結果は JSON 形式ではありません。プロパティ名とプロパティ値をダブル クォータに配置する必要があります。

{ "propName" : "*** \"Hello World!\" ***" }

http://www.json.org/でエスケープする必要がある文字だけでなく、ダブルクォータを読み取る方法。バックスラッシュ文字もエスケープする必要があります。http://www.jsonlint.com/で JSON の結果を確認できます。

逆シリアル化も手動で実装する場合は、4 桁の 16 進数に続くand : 、\b、\f、\n、\r、\t、および \u に任意にエスケープできる文字がさらにあることを知っておく必要があります。\"\\\/

回答の冒頭で書いたように、DataContractJsonSerializerJavaScriptSerializerなどの標準の .NET クラスを使用することをお勧めします。.NET 2.0 以降を使用する必要がある場合は、Json.NETを使用できます。

于 2010-10-15T12:21:51.497 に答える
0

次のようなものを試すことができます:

string.replace(/(\\|")/g, "\\$1").replace("\n", "\\n").replace("\r", "\\r");
于 2010-10-15T13:00:20.087 に答える