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

时间:2011-11-18 11:07:20

标签: php curl

我需要从此页面抓取一个json-string:https://retracted.com

如果查看源代码,我会在var mycarousel_itemList =之后启动json-string。我需要在我的php脚本中将此字符串解析为正确的json数组。

如何做到这一点?

编辑:我已经设法使用explode来解决此问题,但这种方法很丑陋。是否没有内置函数将此json-string转换为数组?

澄清:我希望将我抓取的字符串(正确的json)转换为php数组。

2 个答案:

答案 0 :(得分:1)

获得json数据后,可以使用json_decode(PHP> = 5.2)将其转换为PHP对象或数组

答案 1 :(得分:1)

脚本块中的JSON是invalid,需要先进行一些按摩,然后才能在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数据的数组(demo)。

换句话说,属性必须加双引号,值也必须是双引号。如果您想要一组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(demo)。