Вы можете использовать это как отправную точку:
$data="{'timestamp': '0.', 'class': 'vbd_metrics', 'snapshot': {'io_read_kbs': 0.0, 'last_updated': <DateTime u'19700101T00:00:00Z' at 8b7cacc>, 'uuid': '7b3e71e5-b43a-2c5d-d582-09302901c7fe', 'other_config': {}, 'io_write_kbs': 0.0}, 'operation': 'mod', 'ref': 'OpaqueRef:1c934395-abe1-36a8-9926-20c5e03c1799', 'id': '895794'}";
Var_dump(eval('return '.join('',array_slice(array_map(
function($v){
if(is_array($v)){
$v[1]=str_replace('’','"',$v[1]);
$v[1]=str_replace('‘','"',$v[1]);
$v[1]=trim($v[1]);
if(!empty($v[1])&&$v[1][0]==='<'&&$v[1][strlen($v[1])-1]==='>')
$v[1]=substr($v[1],1,-1);
$v=$v[1];
}else{
if($v==='{') $v='[';
if($v==='}') $v=']';
if($v===':') $v='=>';
if($v==='<') $v='"';
if($v==='>') $v='"';
}
return $v;
},token_get_all('<?php '.$data.' ?>')),1,-1)).';'));
Вывод:
array(6) {
["timestamp"]=>
string(2) "0."
["class"]=>
string(11) "vbd_metrics"
["snapshot"]=>
array(5) {
["io_read_kbs"]=>
float(0)
["last_updated"]=>
string(38) "DateTimeu'19700101T00:00:00Z'at8b7cacc"
["uuid"]=>
string(36) "7b3e71e5-b43a-2c5d-d582-09302901c7fe"
["other_config"]=>
array(0) {
}
["io_write_kbs"]=>
float(0)
}
["operation"]=>
string(3) "mod"
["ref"]=>
string(46) "OpaqueRef:1c934395-abe1-36a8-9926-20c5e03c1799"
["id"]=>
string(6) "895794"
}
По сути, этот код имитирует синтаксический анализ действительного кода PHP. Это позволяет легко заменить некоторые символы на str_replace. Наконец, мы удаляем начальный тег и конечный тег. Мы соединяем массив, чтобы получить строку, а затем используем eval для вернуть его как действительный массив. Грязный, но функциональный.