我需要从这个页面抓取一个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对象或数组