技术频道导航
HTML/CSS
.NET技术
IIS技术
PHP技术
Js/JQuery
Photoshop
Fireworks
服务器技术
操作系统
网站运营

赞助商

分类目录

赞助商

最新文章

搜索

C#清理JSON字符串里的HTML标签和双引号

作者:admin    时间:2023-6-12 18:57:46    浏览:

在获得JSON作为响应内容的时候,我们不能保证字符串符合JSON语法规则,因此需要做一些额外的工作,过滤特殊符号,清理不合要求的字符。在本文中,我将介绍C#如何清理JSON字符串里的HTML标签,同时把双引号变为单引号,以符合JSON字符串的语法规则。

例如下面是我们得到的 JSON 字符串响应。

{
"Link": "<a href="http: //www.webkaka.com/">卡卡测速网</a>",
    "name": "<p>卡卡测速网</p>",
    "Description":"这里是"卡卡测速网",为广大网民提供网站速度测试服务。",
"host": "webkaka",
}

在这里,这个 JSON 包含 JSON 中的 HTML 代码和描述部分中的双引号。为了解决这个问题,我尝试过httputility.HTMLDecode(“<any string>”),但是,它不起作用。因此,让我使用了以下函数,该函数适用于我的解决方案以获取 JSON 对象。

private static string HtmlToPlainText(string JsonString) {
    const string tagWhiteSpace = @ "(>|$)(\W|\n|\r)+<";
    const string stripFormatting = @ "<[^>]*(>|$)";
    const string lineBreak = @ "<(br|BR)\s{0,1}\/{0,1}>";
    var lineBreakRegex = new Regex(lineBreak, RegexOptions.Multiline);
    var stripFormattingRegex = new Regex(stripFormatting, RegexOptions.Multiline);
    var tagWhiteSpaceRegex = new Regex(tagWhiteSpace, RegexOptions.Multiline);
    var text = JsonString;
    text = System.Net.WebUtility.HtmlDecode(text);
    text = tagWhiteSpaceRegex.Replace(text, "><");
    text = lineBreakRegex.Replace(text, Environment.NewLine);
    text = stripFormattingRegex.Replace(text, string.Empty);
    return text;
}

在上面的函数中,我们先简单地检查代码。

  • 第一行将匹配角括号之间的空白和换行符。
  • 第二行将匹配尖括号之间的标签,即使缺少结束标签。
  • 第三行将匹配换行符标记。
  • 下面的第 5 行到第 7 行将创建上述行的正则表达式。
  • 下面的第 10 行到第 13 行将匹配 JSON 字符串并删除 HTML 内容,并提供干净的 JSON 字符串。

上面的函数将返回干净的 JSON 字符串作为响应并删除 HTML 代码。执行上述功能后的响应如下。

{
    "Link": "卡卡测速网",
    "name": "卡卡测速网",
    "Description":"这里是"卡卡测速网",为广大网民提供网站速度测试服务。",
    "host": "webkaka",
}

现在,你可以观察上面的 JSON,你仍然可以检查 JSON 对象的值部分是否有多个双引号。现在,让我们检查以下函数和模型,它为我们提供了最终的干净 JSON 对象。

public class CSharpProfile {
    public string Link {
        get;
        set;
    }
    public string name {
        get;
        set;
    }
    public string Description {
        get;
        set;
    }
    public string host {
        get;
        set;
    }
}
private static CSharpProfile DeserializeJson(string jsonString) {
    var loop = true;
    do {
        try {
            var m = JsonConvert.DeserializeObject < CSharpProfile > (jsonString);
            loop = false;
        } catch (JsonReaderException ex) {
            var position = ex.LinePosition;
            var invalidChar = jsonString.Substring(position - 2, 2);
            invalidChar = invalidChar.Replace("\"", "'");
            jsonString = $ "{jsonString.Substring(0, position - 1)}{invalidChar}  {
                jsonString.Substring(position)
            }
            ";
        }
    } while (loop);
    return JsonConvert.DeserializeObject < CSharpProfile > (jsonString);
}

现在,在上面的代码中,如果你检查我已经创建了一个简单的模型和函数,它将 JSON 作为具有多个双引号的字符串。因此,让我们简单地分步了解。

  • 首先,我进行了一个循环,我们知道如果我们要反序列化没有正确 JSON 对象的字符串,那么它将生成异常。
  • 在这里,我们知道问题出在空间上,所以我尝试反序列化它,并在异常生成时获取了生成异常的当前行。
  • 在当前行号的基础上,我取前一个字符并将双引号替换为单引号。
  • 这将循环直到反序列化成功。

以下是“DeserializeJson”函数成功后JSON对象的最终输出。

{
"Link": "卡卡测速网",
"name": "卡卡测速网",
"Description": "这里是'卡卡测速网',为广大网民提供网站速度测试服务。",
"host": "webkaka"
}

这是一个有效的 JSON 对象。

我在文中创建了两个不同的函数,以便在我们需要时重用,希望对大家有所帮助。

相关文章

标签: CSharp  JSON  JSON字符串  
x
  • 站长推荐
/* 左侧显示文章内容目录 */