使用curl从远程服务器解析JavaScript


Parse JavaScript from remote server using curl

我需要从这个页面抓取一个json字符串:https://retracted.com

查看源,I json-string从var mycarousel_itemList =后面开始。我需要在php脚本中将这个字符串解析为正确的json数组。

如何做到这一点?

编辑:我已经设法把这个使用explode,但方法是丑陋的见鬼。有没有内置的函数来翻译这个json字符串到数组?

澄清一下:我希望我抓取的字符串(这是正确的json)转换成php数组。

脚本块中的JSON是无效的,需要在PHP的本机json_decode函数中使用之前进行一点处理。假设您已经从标记中提取了JSON字符串(确保排除了末尾的分号):

$json = <<< JSON
[ { address: 'Arnegårdsveien 32', … } ]
JSON;
var_dump(
    json_decode(
        str_replace(
            array(
                'address:',
                'thumb:',
                'description:',
                'price:',
                'id:',
                'size:',
                'url:',
                ''''
            ),
            array(
                '"address":',
                '"thumb":',
                '"description":',
                '"price":',
                '"id":',
                '"size":',
                '"url":',
                '"'
            ),
            $json
        )
    ,
    true
    )
);

这将给出一个JSON数据数组的数组(演示)。

换句话说,属性必须用双引号括起来,值也必须用双引号括起来。如果你想要一个stdClass对象的数组来代替"{}"部分,删除true

您可以使用上面所示的str_replace或使用正则表达式:

preg_match('
    (.+var mycarousel_itemList = (['[].+);.+function?)smU',
    file_get_contents('http://bolig…'),
    $match
);
$json = preg_replace(
    array('( ([a-z]+)':)sm', '((''))'),
    array('"$1":', '"'),
    $match[1]
);
var_dump(json_decode($json, true));

上面的代码将获取URL,提取JSON,修复它并转换为PHP(演示)。

一旦您有了json数据,您可以使用json_decode (PHP>= 5.2)将其转换为PHP对象或数组