从JSON替换转义字符

时间:2013-05-22 12:56:01

标签: c# json string replace

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

11 个答案:

答案 0 :(得分:20)

我发现从JSON字符串中删除所有转义字符的最简单,最好的方法是将字符串传递给 Regex.Unescape()方法。

这个方法返回一个没有ecapes的新字符串,甚至是\ n \ t等。

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

答案 1 :(得分:5)

如果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
}

答案 2 :(得分:4)

在大多数情况下,

Regex.Unescape()方法可以正常工作,但某些特定情况需要自定义替换。例如。 Regex.Unescape()会生成not supported in 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>"}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

这种类型的转义字符串通常是在您尝试第二次将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);

答案 5 :(得分:0)

在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; }
    }

答案 6 :(得分:0)

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

答案 7 :(得分:-3)

抓住json字符串并将其设为String.Replace()

string JsonContentFixed = JsonContentString.Replace(@"\", " ");

答案 8 :(得分:-3)

试试这个

json.Replace(@"\", " ")

答案 9 :(得分:-3)

您可以使用Replace()

string variable = "{\"data\": {\"id\": \"1\",\"name\": \"jon\"}}";
Console.WriteLine(variable.Replace("\\", " "));

答案 10 :(得分:-3)

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

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

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

  

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

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

jsonString= jsonString.Replace(@"\"," ");