从.net中的字符串中提取JSON
本文关键字:提取 JSON 字符串 net | 更新日期: 2023-09-27 18:15:58
输入字符串是一些文本与有效的混合 JSON:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<TITLE>Title</TITLE>
<META http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<META HTTP-EQUIV="Content-language" CONTENT="en">
<META HTTP-EQUIV="keywords" CONTENT="search words">
<META HTTP-EQUIV="Expires" CONTENT="0">
<script SRC="include/datepicker.js" LANGUAGE="JavaScript" TYPE="text/javascript"></script>
<script SRC="include/jsfunctions.js" LANGUAGE="JavaScript" TYPE="text/javascript"></script>
<link REL="stylesheet" TYPE="text/css" HREF="css/datepicker.css">
<script language="javascript" type="text/javascript">
function limitText(limitField, limitCount, limitNum) {
if (limitField.value.length > limitNum) {
limitField.value = limitField.value.substring(0, limitNum);
} else {
limitCount.value = limitNum - limitField.value.length;
}
}
</script>
{"List":[{"ID":"175114","Number":"28992"]}
任务是将JSON部分反序列化为某个对象。字符串可以以一些文本开头,但它肯定包含有效的JSON。我尝试过使用JSON验证REGEX,但是在。net中解析这种模式有一个问题。
所以最后我只想得到:
{
"List": [{
"ID": "175114",
"Number": "28992"
}]
}
澄清1:
在整个混乱的字符串中只有单个 JSON对象,但文本可以包含{}(实际上是HTML,可以包含带有<script> function(){.....
的javascript)
您可以使用这个方法
public object ExtractJsonObject(string mixedString)
{
for (var i = mixedString.IndexOf('{'); i > -1; i = mixedString.IndexOf('{', i + 1))
{
for (var j = mixedString.LastIndexOf('}'); j > -1; j = mixedString.LastIndexOf("}", j -1))
{
var jsonProbe = mixedString.Substring(i, j - i + 1);
try
{
return JsonConvert.DeserializeObject(jsonProbe);
}
catch
{
}
}
}
return null;
}
关键思想是搜索所有{和}对并探测它们,如果它们包含有效的JSON。第一个有效的JSON事件被转换为对象并返回。
使用正则表达式查找所有可能的JSON结构:
'{(.|'s)*'}
Regex例子
然后迭代所有这些匹配,直到找到一个不会导致异常的匹配:
JsonConvert.SerializeObject(match);
如果您知道JSON结构的格式,请使用JsonSchema