解析JSON输出在PHP

问题描述:

我有一个运行一个Perl脚本,使用POPEN和Perl脚本输出以下回PHP解析JSON输出在PHP

{ 'City' => [ 'LA', 'Chicago', 'NY' ], 'Name' => 'Kevin Bridges', 'Id' => '7075', 'Last-Status-Change' => { 'Time' => 14172911, 'User' => 'kbridge', 'To' => 'LAX', 'From' => 'ORD' }} 

我不能修改的Perl脚本的PHP文件,并我真的不知道它的内容。但它看起来像是在输出JSON。我试图使用json_encode来抓取输出的内容,但没有成功。任何人都可以告诉我,如果有可能解析这个或我必须手动编写解析器?

+0

这不是json,单引号和'=>'在json中不起作用。你可以用双引号替换单引号,用':'替换'=>',但这是一种必然会在某些时候失败的黑客行为。 – jeroen 2014-08-28 21:15:50

+0

你会考虑只是手动解析它是最好的选择吗? – 2014-08-28 21:26:41

+0

这取决于您的数据格式是如何修复的。如果数据中没有任何双引号或'=>'序列,则可以将结果替换并解析为json。 – jeroen 2014-08-28 21:29:02

这不是JSON,但它几乎是PHP []阵列语法,只是它使用了一些{}。你可以尝试:

eval('$array = ' . str_replace(['{','}'], ['[',']'], $output) . ';'); 
print_r($array); 
+0

这比我的黑客还要糟糕;-) – jeroen 2014-08-28 21:19:12

+0

哈!不,我从PERL转到PHP阵列。你们从PERL到JSON到PHP ;-) – AbraCadaver 2014-08-28 21:26:19

+0

也许吧,但是对一个未知perl脚本的结果'eval'看起来很可怕:) – jeroen 2014-08-28 21:31:22

它没有看起来就像是一个有效的JSON,这似乎是一个Perl中的哈希,所以我想你会需要分析你实现这一目标是手动...一个简单的方法在PHP中,这将是取代{ - }为[],您可以EVAL该字符串是考虑PHP

数组转换=>:'"。之后使用json_decode从字符串中创建关联数组。

$array = json_decode(str_replace(["=>", "'"], [":", '"'], $a), true); 
+0

我能够成功地取代所有的'=>'到':'和'''''''但是当我做'var_dump(json_decode($ output,true));'我得到NULL并且就是这样 – 2014-08-28 21:54:35

+0

我测试了这个代码你的输入在'$ a'中,并且它可以工作,确保你没有使用'json_decode'两次,并且你的服务器上启用了JSON扩展 – nisargjhaveri 2014-08-28 21:59:30

+0

还要确保你的Perl脚本输出没有任何不一致JSON然后'=>'和''' – nisargjhaveri 2014-08-28 22:01:55