我需要从此页面抓取一个json-string:https://retracted.com
如果查看源代码,我会在var mycarousel_itemList =
之后启动json-string。我需要在我的php脚本中将此字符串解析为正确的json数组。
如何做到这一点?
编辑:我已经设法使用explode
来解决此问题,但这种方法很丑陋。是否没有内置函数将此json-string转换为数组?
澄清:我希望将我抓取的字符串(正确的json)转换为php数组。
答案 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)。