|
|
|
|
|
|
在獲得JSON作為響應內容的時候,我們不能保證字符串符合JSON語法規則,因此需要做一些額外的工作,過濾特殊符號,清理不合要求的字符。在本文中,我將介紹C#如何清理JSON字符串里的HTML標簽,同時把雙引號變為單引號,以符合JSON字符串的語法規則。
例如下面是我們得到的 JSON 字符串響應。
{
"Link": "<a href="http: //www.cuckooft.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;
}在上面的函數中,我們先簡單地檢查代碼。
上面的函數將返回干凈的 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 作為具有多個雙引號的字符串。因此,讓我們簡單地分步了解。
以下是“DeserializeJson”函數成功后JSON對象的最終輸出。
{
"Link": "卡卡測速網",
"name": "卡卡測速網",
"Description": "這里是'卡卡測速網',為廣大網民提供網站速度測試服務。",
"host": "webkaka"
}這是一個有效的 JSON 對象。
我在文中創建了兩個不同的函數,以便在我們需要時重用,希望對大家有所幫助。
相關文章
