【问题标题】:c# parse javascript contentc#解析javascript内容
【发布时间】:2014-04-09 18:03:19
【问题描述】:

所以我有一个网络抓取项目,其中一个页面在一组<script> 标签内包含所有必要的 JSON 格式内容。

这里是说<script>标签的例子:

<script>
  window.postData = {}
  window.postData["content"] = [json content]
</script>

我已经使用 HtmlAgilityPack 来获取特定的 &lt;script&gt; 标签,但我不确定如何从中获取 json 内容。我可以用 JSON.net 或其他库/框架解析 JSON,所以我不担心那部分。我只是坚持只获得Json。是否有 javascript 解析库或可以用来获取此内容的东西,或者是否有其他方法可以完成此操作。

任何帮助将不胜感激!

【问题讨论】:

    标签: c# javascript parsing


    【解决方案1】:

    查看jint

    var postDataJSON = new Engine()
        .Execute("window.postData = {}; window.postData['content'] = [json content]")
        .GetValue("window.postData");
    

    【讨论】:

    • 我的猜测是这会崩溃,因为window 将是未定义的。不过,将 window = {}; 添加到字符串应该可以解决这个问题。 Jint 是一个很酷的项目,但它只是一个 js 解释器,它不会为依赖于 window-object 或 DOM 的浏览器编写的脚本走得太远。就我个人而言,我可能会用正则表达式来解决这个问题。
    • @kavun 这是希望我知道[json content] 应该是什么吗?如果我不知道内容是什么怎么办?只知道那里有内容?我想我可以将 &lt;script&gt; 节点的 HtmlNode 文本内容转储为 string nodeText = node.InnerText; 并将其用作 .Execute(nodeText).GetValue("window.postData"); ???
    • @Karl-JohanSjögren 我不反对使用正则表达式,但我不太擅长。
    • @kavun 非常感谢。我要试一试,看看效果如何。谢谢!
    • @kavun 如果我的脚本包含:window.postData["content"] = [json content] window.postData["content-2"] = [json content] 我可以只看其中一个项目,还是只能将两者结合在一起看?还是我需要为此发布另一个问题?
    猜你喜欢
    • 2013-08-30
    • 2016-03-07
    • 2019-05-24
    • 2015-02-23
    • 2020-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多