2010-08-03 181 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