JSON文字列の "\"文字を空白に置き換えたいのですが。どうやってやるの?
JSON文字列からすべてのエスケープ文字を削除する最も簡単で最良の方法は、文字列をRegex.Unescape()メソッドに渡すことです。このメソッドは、エスケープなしの新しい文字列を返します。\ n\tなども削除されます。
詳細については、このMSDNの記事を参照してください: Regex.Unescape Method(String)(System.Text.RegularExpressions)
Jsonオブジェクトが文字列の場合、次のコードスニペットに示すようにjson文字列JObject.Parse({string})をクリーンアップするには、.Netでエスケープ "\"文字を追加します。
var myJsonAsString = "{\"Name\": \"John\", \"LastName\": \"Doe\", \"Age\": 199 }";
var myCleanJsonObject = JObject.Parse(myJsonAsString);
エスケープ文字が削除されたクリーンなJsonオブジェクトが表示されます。
{
"Name": "John",
"LastName": "Doe",
"Age": 199
}
Regex.Unescape()
メソッドはほとんどの場合問題なく動作しますが、特定のケースではカスタム置換が必要です。例えば。 Regex.Unescape()
は、実際の改行を生成します JSONではサポートされていません 。
エスケープされていないJSON:
{"comments_count":27,"comments":"<a name=\"comments\"><\/a>\n\n\t\n\t\n\t\t\n\t<div class=\"CommentsList\">\n\t\t<strong>COMENTARII<\/strong>\n\t\t"}
Regex.Unescape
{"comments_count":27,"comments":"<a name="comments"></a>
Replacements
<div class="CommentsList">
<strong>Comments</strong>
"}
カスタム交換品
private string SanitizeReceivedJson(string uglyJson)
{
var sb = new StringBuilder(uglyJson);
sb.Replace("\\\t", "\t");
sb.Replace("\\\n", "\n");
sb.Replace("\\\r", "\r");
return sb.ToString();
}
{"comments_count":27,"comments":"<a name=\"comments\"><\/a>\n\n\t\n\t\n\t\t\n\t<div class=\"CommentsList\">\n\t\t<strong>COMENTARII<\/strong>"}
このタイプのエスケープ文字列は、通常、JSONの文字列をもう一度JSONにエンコードしようとすると生成されます。これにより、「さまざまなレベルのシリアライゼーション」などが発生します。
ソリューション:
コード:
// Initial example json string: "\"{\\\"Property1\\\":1988,\\\"Property2\\\":\\\"Some data :D\\\"}\""
// First, deserialize to another string (unescaped string).
string unescapedJsonString = JsonConvert.DeserializeObject<string>(escapedJsonString);
// Result: "{\"Property1\":1988,\"Property2\":\"Some data :D\"}"
// Second, deserialize to another string, again (in this case is necessary)
var finalUnescapedJsonString = JsonConvert.DeserializeObject<string>(unescapedJsonString);
// {"Property1":1988,"Property2":"Some data :D"} This time prints a final, unescaped, json string:
// Finally, perform final deserialization to the target type, using the last unescaped string.
MyClass targetObject = JsonConvert.DeserializeObject<MyClass>(finalUnescapedJsonString);
名前または値に\が含まれている場合は、二重にエスケープされますが、C#の文字列割り当てがそれを行います。適切な方法は、variable.Replace( "\\\\"、 "\\");を使用することです。またはvariable.Replace(@ "\\"、@ "\");これにより、二重にエスケープされた\文字が削除され、値にREQUIRED \が残されます。たとえば、JSONに "Domain\Username"が含まれている場合、これは\ "Domain \\\\ Username \"として返され、それを文字列に割り当てるとDomain \\ Usernameになります。