从 html 字符串中提取 json 对象
本文关键字:json 对象 提取 html 字符串 | 更新日期: 2023-09-27 18:34:19
我遇到了一个问题,即我从包含 html 的 Web 请求中获取一个字符串,但该 html 内部是一个 json 对象,我需要将其解析为要在代码中使用的对象,但我被困在如何做到这一点。
我尝试使用 IndexOf() 和 LastIndexOf(),但是当我尝试将它们指向第一个和最后一个大括号时,我得到的索引为 -1 和一个异常。
有什么想法吗?
编辑:我还尝试将其转换为字符列表并对其进行擦除,但是当它被转换时,大括号消失了,位置是一个空条目。
编辑2:
添加了我从请求中获取的 html,我需要提取的第 3-5 行。
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<body onload="parent.postMessage('redirectResponse=
{"messageId":"4232450191","errorCode":0,"sessionToken":
{"sessionToken":"tRabFfRPwYX4fGdHZOrBYDAAoICwwCDo","issuerSystemId":"380","creationTime":
{"timestamp":"2016-02-11T08:58:30.000+00:00"},"expirationTime":
{"timestamp":"2016-02-11T09:03:30.000+00:00"},"maxIdlePeriod":0},
"realMode":1,"username":"myUserName"}
', 'https://target.site.com');"></body></html>
- 您可以使用正则表达式来剪切 JSON 文本。
- 使用 Newtonsoft.Json 包解析 Json 文本。
string htmlText = Resources.html;
string jsonPtn = @"'{(?:[^'{'}]|(?<o>'{)|(?<-o>'}))+(?(o)(?!))'}";
string input = htmlText.Substring(htmlText.IndexOf("redirectResponse="));
Match match = Regex.Matches(input, jsonPtn, RegexOptions.Multiline | RegexOptions.IgnoreCase)[0];
string jsonText = match.Groups[0].Value;
var jsonObj = JObject.Parse(jsonText);
jsonObj 将如下所示:
{{ "消息 ID": "4232450191", "错误代码":0, "会话令牌":{ "sessionToken": "tRabFfRPwYX4fGdHZOrBYDAAoICwwCDo", "发行者系统ID": "380", "创建时间":{ "时间戳":"2016-02-11T03:58:30-05:00" }, "过期时间":{ "时间戳":"2016-02-11T04:03:30-05:00" }, "最大空闲周期": 0 }, "真实模式": 1, "用户名": "我的用户名"}}<</p>
你能提供你收到的html字符串吗?
更新:
可能是编码的问题。
尝试:
使用 HttpWebResponse 的编码问题
或
是否可以以正确的编码从网络响应中获取数据
if (response.CharacterSet == null)
{
readStream = new StreamReader(receiveStream);
}
else
{
readStream = new StreamReader(receiveStream, Encoding.GetEncoding(response.CharacterSet));
}
如果您在上面的链接中找不到解决方案,请发布您正在使用的代码...
public class MyHtmlTagRemover {
public static void main(String a[]){
String text = "<B>I don't want this to be bold<''B>";
System.out.println(text);
text = text.replaceAll("''<.*?''>", "");
System.out.println(text);
}
}