【发布时间】:2017-03-14 16:06:24
【问题描述】:
输入字符串是一些带有有效 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 validation REGEX,但在 .NET 中解析此类模式时出现问题。
所以最后我只想得到:
{
"List": [{
"ID": "175114",
"Number": "28992"
}]
}
说明 1:
整个凌乱的字符串中只有 单个 JSON 对象,但文本可以包含 {}(它实际上是 HTML,可以包含带有 <script> function(){..... 的 javascripts)
【问题讨论】:
-
嗯...你可以使用 Json.NET
-
@AndyKorneyev 我试过了,但它无法正确反序列化字符串。所以我必须以某种方式告诉 JSON.NET 如何解析它。
-
为什么JSON部分前后的文字存在?文本可以包含
{和}吗?如果不是,那么简单的解决方案是找到第一个和最后一个括号,并假设这是 JSON 的开始和结束。否则我会说你搞砸了,因为你无法判断实际 JSON 从哪里开始。 -
也许该文本有一些限制?例如,是否可以包含“{”字符?
-
你搞砸了,因为即使
{}也是有效的 json,而且你的 html 包含的文本中包含的内容可能是脱离上下文的实际 json。但是,如果您知道它的放置位置,您可以尝试使用 DOM 解析器从 HTML 中提取您的 JSON。如果你的 JSON 是用 HTML 格式化的,你可能会更糟:X
标签: c# .net json regex extract