2010-08-03 274 views
1

所有,修剪引導和拖尾空格值

我用PHP做一個JSON請求到Web服務器,並返回我的變量的JSON響應。 JSON響應將包含許多鍵和值。我想要一個函數來修整整個JSON響應的鍵值對的每個「值」中的前導和尾隨空白。

我該如何通過PHP來做到這一點?

例:json_decode場所由於尾部空格或特殊字符:

{ 
    "glossary": { 
     "title": "example glossary", 
    "GlossDiv": { 
      "title": "S", 
    "GlossList": { 
       "GlossEntry": { 
        "ID": "SGML", 
    "SortAs": "SGML", 
    "GlossTerm": "Standard Generalized Markup Language‡flfi·€.. ", 
    "Acronym": "SGML", 
    "Abbrev": "ISO 8879:1986", 
    "GlossDef": { 
         "para": "create markup languages such as DocBook.  ", 
     "GlossSeeAlso": ["GML", "XML"] 
        }, 
    "GlossSee": "markup" 
       } 
      } 
     } 
    } 
} 
+0

'json_decode'不會在這個字符串上中斷。 – hakre 2014-05-25 20:53:56

回答

2

進程中的數據,然後再將其編碼成JSON格式。最好清理源代碼而不是混淆JSON版本,並且可能會使用格式錯誤的正則表達式來刪除它不應該有的東西。

基本上,這樣做:

foreach($data as $key => $value) { 
    $data[$key] = trim($value); 
} 

$json = json_encode($data); // $json's values are now pre/post-whitespace free 

(假設它是一個簡單的一維數組)。

編輯/評論跟進:

您的PHP腳本是否抓取這個外部JSON?如果是這樣的話,那麼你可以平凡的JSON解碼成PHP對象/數組,做空白修剪,並重新編碼成JSON:

$json = get_json_from_external_source(); 
$data = json_decode($json); 

,然後foreach循環(或array_map在託默勒格的提及評論)像以前一樣。如果您僅限於在Javascript中使用此客戶端,那麼您可以在將數據交給任何需要它的功能之前進行等效處理。

編輯/註釋後續#2:

我很懷疑這是JSON數據的價值觀裏面後面的空格。 JSON完全有能力處理任何發生在字符串內的空間,並且不關心有多少(或少數)。最有可能的是GlossTerm條目中的時髦字符。

如果您使用的是PHP 5.3(或更高測試版),則會有json_last_error()這將報告爲什麼解碼失敗。

+0

我猜''data = array_map(「trim」,$ data)'也會這樣做。 – Tomalak 2010-08-03 17:43:37

+0

這會保持json格式或數組格式嗎? – Jake 2010-08-03 17:45:46

+0

問題是,我從外部源獲取json響應。我不生成它。因此,需要修改響應中的空格,然後將其編碼爲數組格式 – Jake 2010-08-03 17:49:19