32

我想用空格替换 JSON 字符串中的“\”字符。我怎样才能做到这一点?

4

11 回答 11

34

我发现从 JSON 字符串中删除所有转义字符的最简单和最好的方法是将字符串传递给Regex.Unescape()方法。此方法返回一个没有转义符的新字符串,甚至删除了 \n \t 等。

有关详细信息,请参阅此 MSDN 文章Regex.Unescape Method (String) (System.Text.RegularExpressions)

于 2016-01-21T15:49:34.203 回答
20

如果 json 对象是字符串,则在 .Net 中添加转义“\”字符,如果您想清理 json 字符串,JObject.Parse({string}) 如下代码片段所示,可以很好地清理:

var myJsonAsString = "{\"Name\": \"John\", \"LastName\": \"Doe\", \"Age\": 199 }";

var myCleanJsonObject = JObject.Parse(myJsonAsString);

应该给我们一个干净的 Json 对象,去掉转义字符。

{
"Name": "John",
"LastName": "Doe",
"Age": 199
}
于 2018-09-06T15:00:47.323 回答
16

这种类型的转义字符串通常在您尝试将 JSON 字符串第二次编码为 JSON 时生成。这会导致诸如“各种级别的序列化”之类的事情

解决方案:

  • 首先,您需要反序列化转义的字符串,但不要反序列化为目标 CLR 类型,而是反序列化为另一个字符串
  • 如有必要,再次对字符串类型重复反序列化。
  • 然后对目标类型执行最终反序列化:

代码:

// 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);
于 2019-01-29T22:02:07.760 回答
9

Regex.Unescape()方法在大多数情况下都可以正常工作,但某些特殊情况需要自定义替换。例如,将生成JSON 不支持的Regex.Unescape()实际换行符。

未转义的 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"}

正则表达式

{"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>"}
于 2016-10-22T06:08:19.980 回答
0

C# 字符串赋值会为您执行此操作,但如果名称或值包含 \,它将被双重转义。正确的方法是使用 variable.Replace("\\\\","\\"); 或 variable.Replace(@"\\",@"\"); 这将删除双转义 \ 字符,保留 REQUIRED \ 值。例如,如果 JSON 包含“Domain\Username”,这将返回为 \"Domain\\\\Username\" 将其分配给字符串将导致您将拥有 Domain\\Username

于 2015-06-25T16:30:42.527 回答
0

您可以使用 Regex.Unescape(yourEscapedString);

于 2020-03-02T08:53:23.040 回答
-1

在 c# 中,您只有一种创建标准 JSON 结果的方法:

您必须使用您的自定义属性名称添加一个类,然后返回 Json(myClassForJsonResult) 作为底部代码:

public ActionResult testJsonData()
{
    var myClassForJsonResult=new YourClassOfYourCustomProperties();
    myClassForJsonResult.FirstPropertyStringType="first";
    myClassForJsonResult.SecondPropertyIntType=2;

    return Json(myClassForJsonResult);
}

类定义:

    public class YourClassOfYourCustomProperties
    {
        public string FirstPropertyStringType{ get; set; }
        public int SecondPropertyIntType{ get; set; }
    }
于 2019-11-16T15:24:12.753 回答
-3

基本上你在问如何替换 C# 中的反斜杠。

你必须使用String.Replace方法。文档告诉我们:

String.Replace方法(字符串,字符串)

返回一个新字符串,其中当前实例中出现的所有指定字符串都替换为另一个指定字符串。

因此,您的字符串将采用Replace方法返回的值:

jsonString= jsonString.Replace(@"\"," ");
于 2013-05-22T13:07:05.917 回答
-3

尝试这个

json.Replace(@"\", " ")
于 2013-05-22T12:58:33.603 回答
-4

您可以使用替换()

string variable = "{\"data\": {\"id\": \"1\",\"name\": \"jon\"}}";
Console.WriteLine(variable.Replace("\\", " "));
于 2013-05-22T12:59:32.113 回答
-4

只需获取 json 字符串并使其成为String.Replace()

string JsonContentFixed = JsonContentString.Replace(@"\", " ");
于 2013-05-22T12:58:26.547 回答