修剪JSON值中的前导和尾随空格

时间:2010-08-03 17:28:20

标签: php json zend-framework

所有

我使用PHP向Web服务器发出JSON请求,它在变量中返回一个JSON响应。 JSON响应将包含许多键和值。我想要一个函数来修剪整个JSON响应的键值对的每个“值”中的前导和尾随空格。

我怎么能通过PHP做到这一点?

Ex: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"
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分: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

(假设它是一个简单的1维数组)。

编辑/评论后续:

您的PHP脚本是否正在获取此外部JSON?如果是这种情况,那么您可以轻松地将JSON解码为PHP对象/数组,进行空白修剪,并重新编码为JSON:

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

然后像以前一样使用foreach循环(或Tomalak评论中提到的array_map)。如果你只能在Javascript中使用这个客户端,那么你可以在将数据交给任何需要它的函数之前进行等效处理。

编辑/评论后续#2:

我高度怀疑它是JSON数据值中的尾随空格。 JSON完全能够处理字符串中出现的空格,而不关心有多少(或很少)。很可能是GlossTerm条目中的时髦字符。

如果您使用的是PHP 5.3(或更高版本的测试版),那么json_last_error()会报告解码失败的原因。