2014-08-28 127 views
-1

我有一個運行一個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

回答

0

這不是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

0

它沒有看起來就像是一個有效的JSON,這似乎是一個Perl中的哈希,所以我想你會需要分析你實現這一目標是手動...一個簡單的方法在PHP中,這將是取代{ - }爲[],您可以EVAL該字符串是考慮PHP

1

數組轉換=>:'"。之後使用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