2012-08-16 127 views
0

我是一名PHP開發人員,負責處理將逐步解析JSON對象的代碼,以便在以最終形式輸出數據之前處理數據。下面是一些例子JSON(其非常大的,所以我刪除我最需要的物品,只是把無效部分):如何從PHP中的JSON輸出中去除無效字符

[ 
    { 
     "items": [ 
      { 
       // this is valid and what I need. 
      } 
     ], 
     "espots": [ 
      { 
       "content": " 
[TopNavigation_Appliances] 
" 
      } 
     ] 
    }, 

我已經有效地從源頭上剝離了JSON要嚴格是屬該JSON數據傳遞給json_decode()。但是,我總是得到一個空結果,因爲JSON對象有一個無效的部分,我的代碼實際上並不需要運行。 JSON的整個「espots」部分在我的應用程序中是不需要的,但多行「內容」部分是擰json_decode()。有沒有在PHP中通過RegEx或一些漂亮的PHP的方式,將從JSON輸出中去除這些項目,以便我可以正確使用json_decode()來檢索n代碼,然後我的代碼可以按照我需要的方式操作和處理至?

下面是JSONLint(和另外一個驗證器)提供的錯誤消息:

Parse error on line 263: 
...   "content": "[TopNavigation_App 
-----------------------^ 
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '[' 

我收集的是「[導致無效的JSON,但我JSON的不是專家

我已經嘗試以下無濟於事:

  • str_replace()函數在其原始格式線
  • 裝飾()和str_replace函數
  • trim()
  • str_replace刪除換行符然後嘗試str_replace()JSON的元兇部分。
+1

你能更好地描述什麼是無效的嗎?你能告訴我們'json_decode()'失敗的代碼嗎? – Brad 2012-08-16 20:54:08

+0

添加了JSONLint錯誤消息。然而,輸出並不是直的「內容」:「[,它的多行代碼如上所示 – 2012-08-16 21:01:09

回答

1

JSON是以字符串形式出現的嗎?它不是「[」,而是方括號前面的新線路,它正在拋棄。如果是這樣你或許可以用str_replace函數,如:

$jsonStr = str_replace("\n", '', str_replace("\r", '', $jsonStr)); 

但隨後其難度肯定知道沒有更多的代碼。

preg_replace('#, "espots":.*?}\s]#', '', preg_replace('/\s+/', ' ',$nearlyThere[0])); 

上沒有在原崗位獲得隨機無效的字符串然後輕微str_replaces:

+0

完整的JSON文檔超過3,330行重複的json(在上面的結構中嵌入了JSON數組。它每次都會在[TopNavigation_Appliances]的行間被拋出(這種情況發生的次數高達20次)。 – 2012-08-16 21:19:31

+0

@JeremyDentel,你試過Robert的建議嗎? – Brad 2012-08-16 22:00:07

+0

是的,我仍然從json_decode()得到一個空響應。有一種方法可以從PHP獲得更準確的錯誤? – 2012-08-17 02:09:18

0

我使用以下正則表達式從上述違規「espots」去掉空格&則解決了這個它100%有效。

相關問題