JSON.stringify根据两个不同的页面上下文而表现不同

时间:2013-10-31 19:27:57

标签: javascript json phantomjs casperjs headless-browser

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

因此,使用CasperJS(和PhantomJS),您可以使用Evaluate PhantomJS Evaluate CasperJS方法进入Page上下文。

我在页面上下文中创建了一个对象,为了将其返回到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表现“不同”什么时候在不同的页面上下文?对我有意思!

1 个答案:

答案 0 :(得分:0)

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