在PHP中使用preg_split进行JSON拆分
我有不同的服务器在PHP中使用preg_split进行JSON拆分,php,preg-split,Php,Preg Split,我有不同的服务器 $strarrServerIp = array('192.168.123.1','192.168.123.2'); $strarrLogsData = array(); foreach($strarrServerIp as $strServerIp ){ $strCommand = 'ssh abose@' . $strServerIp . ' cat /srv/www/vhosts/trunk/Logs/Log20130825.psi.log';
$strarrServerIp = array('192.168.123.1','192.168.123.2');
$strarrLogsData = array();
foreach($strarrServerIp as $strServerIp ){
$strCommand = 'ssh abose@' . $strServerIp . ' cat /srv/www/vhosts/trunk/Logs/Log20130825.psi.log';
$strarrLogsData[] = shell_exec( $strCommand );
}
foreach( $strarrLogsData as $strJsonLogData ){
foreach( preg_split("/((\r?\n)|(\r\n?))/", $strJsonLogData ) as $strJsonLineLog ) {
display($strJsonLineLog);
}
}
服务器包含包含此格式的JSON日志的文件
{"timestamp":"2013-08-25 20:35:06 MDT","severity":"INFO","data":"1"}
{"timestamp":"2013-08-25 20:36:06 MDT","severity":"INFO","data":"15"}
{"timestamp":"2013-08-25 20:37:06 MDT","severity":"INFO","data":"32"}
{"timestamp":"2013-08-25 20:38:06 MDT","severity":"INFO","data":"25"}
{"timestamp":"2013-08-25 20:39:06 MDT","severity":"INFO","data":"5"}
我想把它们分成一个数组
array (
[0] => {"timestamp":"2013-08-25 20:35:06 MDT","severity":"INFO","data":"1"}
[1] => {"timestamp":"2013-08-25 20:36:06 MDT","severity":"INFO","data":"15"}
[2] => {"timestamp":"2013-08-25 20:37:06 MDT","severity":"INFO","data":"32"}
[3] => {"timestamp":"2013-08-25 20:38:06 MDT","severity":"INFO","data":"25"}
[4] => {"timestamp":"2013-08-25 20:39:06 MDT","severity":"INFO","data":"5"}
)
有什么建议吗?
我想要比你更好的东西
preg_split("/((\r?\n)|(\r\n?))/", $strJsonLogData )
按
\n
拆分,并在每一行上使用json\u decode
。尝试此操作,您还可以使用file()函数将每一行在数组中分开
$text = '
{"timestamp":"2013-08-25 20:35:06 MDT","severity":"INFO","data":"1"} {"timestamp":"2013-08-25 20:36:06 MDT","severity":"INFO","data":"15"}
{"timestamp":"2013-08-25 20:37:06 MDT","severity":"INFO","data":"32"}
{"timestamp":"2013-08-25 20:38:06 MDT","severity":"INFO","data":"25"}
{"timestamp":"2013-08-25 20:39:06 MDT","severity":"INFO","data":"5"}';
$array = preg_split("#}.*?{#s", $text );
$array = array_map("trim", $array);
print_r($array);
//using preg_match_all
preg_match_all("#({.*?})#s", $text, $matches);
print_r($matches[1]);
您希望该文件中有许多行吗?也许你最好一次读一行。或者你可以在newline上爆炸。你是如何读取文件内容的?你能把那部分也发出去吗?preg_split(“/(\r?\n)|(\r\n?)/”,$strJsonLogData)已经发了。我想要一个自定义函数,即使它们在同一行上也会分开。