【问题标题】:JSON.stringify behaving different depending on two different pages contextJSON.stringify 根据两个不同的页面上下文表现不同
【发布时间】:2013-11-11 23:05:17
【问题描述】:

我正在使用 CasperJS 来抓取网站。我发现了一件有趣的事情,但我不确定它为什么会发生。

因此,使用 CasperJS(和 PhantomJS),您可以使用他们的 Evaluate PhantomJS Evaluate CasperJS 方法进入页面上下文。

我在页面上下文中创建了一个对象,为了将它返回给 CasperJS,我将它转换为字符串。这是我的工作:

casper.then(function() {
    var test = this.evaluate(function() {
        var test_obj = { test_obj: ['test'] }
        console.log("TEST OBJECT VALUE:");
        var JSON_obj = JSON.stringify(test_obj);
        console.log(JSON_obj);
        return JSON_obj;
    });
});

所以,在两个不同的页面,结果是不同的:

当在 page 上下文中时,JSON_obj 值为:

{"test_obj":"[\"test\"]"}

当在另一个page 上下文中时,JSON_obj 值为:

{"test_obj":["test"]}

这很糟糕,因为我在 Ruby 中捕获了结果,并且在执行 JSON.parse 时,对于第一种情况,它将数组视为字符串...知道为什么 JSON.stringify 在不同页面中会表现得“不同”上下文?对我来说很有趣!

【问题讨论】:

  • 可能JSON对象不一样。
  • 那不是 JS 原生的吗?可能是某个库被覆盖了?啊!
  • 您是否通过覆盖stringify 实现解决了这个问题?

标签: javascript json phantomjs casperjs headless-browser


【解决方案1】:

我认为这可能与这个问题有关 - JSON.stringify() array bizarreness with Prototype.js。当网站安装了 Prototype.js 框架时,JSON.stringify 可能会产生与您通常预期不同的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多