我正在尝试构建一个使用为JavaScript制作的应用程序接口的应用程序。它不是向下发送JSON或XML,而是发送一个包含JavaScript对象的脚本标记,如下所示:
<script>
var apiresult = {
success: true,
data: {
userName: "xxxxx",
jsonData: {
"id" : "8342859",
"price" : "83.94"
}
}
};
</script>我只想退出"jsonData“属性。在浏览器中,你可以去:
apiresult.data.jsonData;显然,我不能在C#中做到这一点。我尝试过像这样使用Jint和HtmlAgilityPack:
HtmlDocument = await client.GetHTMLAsync(url);
string scriptTag = htmlResult.DocumentNode.SelectNodes("//script").InnerHtml;
scriptTag += " return apiresult.data.jsonData;
JintEngine engine = new JintEngine();
Jint.Native.JsObject r = (Jint.Native.JsObject)engine.Run(scriptTag);如果我在监视窗口中展开"r.Results“,它将显示变量的值,但是我如何才能得到原始的JSON,以便将其解析到我的对象中呢?
发布于 2013-06-05 16:12:55
最后,我使用jurassic来做这件事。比JInt更容易使用。我的代码现在看起来像这样:
ScriptEngine engine = new ScriptEngine();
object result = engine.Evaluate(scriptString);
var json = Jurassic.Library.JSONObject.Stringify(engine, result);发布于 2015-06-05 14:50:02
我遇到了同样的问题,下面是我是如何用Jint做到的
var engine =new Engine();
var html =
@"<script>
var apiresult = {
success: true,
data: {
userName: ""xxxxx"",
jsonData: {
""id"" : ""8342859"",
""price"" : ""83.94""
}
}
};
</script>";
var doc=new HtmlDocument();
doc.LoadHtml(html);
var script = doc.DocumentNode.SelectNodes("//script").First().InnerHtml;
var result = engine
.Execute(script)
.Execute("var x=apiresult.data.jsonData;")
.GetValue("x");
var jsonData = engine.Json.Stringify(result, new[] { result });https://stackoverflow.com/questions/16800396
复制相似问题