首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用JInt或类似工具解释/解析c#中的Javascript变量

使用JInt或类似工具解释/解析c#中的Javascript变量
EN

Stack Overflow用户
提问于 2013-05-29 03:57:30
回答 2查看 3.2K关注 0票数 2

我正在尝试构建一个使用为JavaScript制作的应用程序接口的应用程序。它不是向下发送JSON或XML,而是发送一个包含JavaScript对象的脚本标记,如下所示:

代码语言:javascript
复制
<script>
var apiresult = {
    success: true,
    data: {
        userName: "xxxxx",
        jsonData: { 
            "id" : "8342859",
            "price" : "83.94"
            }
        }
    };
</script>

我只想退出"jsonData“属性。在浏览器中,你可以去:

代码语言:javascript
复制
apiresult.data.jsonData;

显然,我不能在C#中做到这一点。我尝试过像这样使用Jint和HtmlAgilityPack:

代码语言:javascript
复制
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,以便将其解析到我的对象中呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-05 16:12:55

最后,我使用jurassic来做这件事。比JInt更容易使用。我的代码现在看起来像这样:

代码语言:javascript
复制
ScriptEngine engine = new ScriptEngine();

object result = engine.Evaluate(scriptString);

var json = Jurassic.Library.JSONObject.Stringify(engine, result);
票数 4
EN

Stack Overflow用户

发布于 2015-06-05 14:50:02

我遇到了同样的问题,下面是我是如何用Jint做到的

代码语言:javascript
复制
        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 });
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16800396

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档