【问题标题】:Trim leading and trailing white spaces in JSON values修剪 JSON 值中的前导和尾随空格
【发布时间】:2010-08-03 17:28:20
【问题描述】:

全部,

我使用 PHP 向 Web 服务器发出 JSON 请求,它在变量中返回 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"
                }
            }
        }
    }
}

【问题讨论】:

  • json_decode 不会在此字符串上中断。

标签: php json zend-framework


【解决方案1】:

在将数据编码为 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 循环(或 Tomalak 评论中提到的 array_map)。如果您仅限于在 Javascript 中执行此客户端,那么您可以在将数据交给任何需要它的函数之前在那里进行等效处理。

编辑/评论跟进#2:

我非常怀疑这是 JSON 数据值中的尾随空格。 JSON 完全有能力处理字符串中出现的任何空格,并且不在乎有多少(或少数)。很可能是 GlossTerm 条目中的时髦字符。

如果您使用的是 PHP 5.3(或更高的 beta 版本),json_last_error() 将报告解码失败的原因。

【讨论】:

  • 我猜$data = array_map("trim", $data) 也会这样做。
  • 问题是,我从外部来源获得了 json 响应。我不生成它。因此需要修剪响应中的空格,然后再将其编码为数组格式
  • @Marc:我相信在我的代码中,由于外部 json 中的尾随空格,json_decode() 函数对我来说失败了。在 json_decode 之前清理 JSON 有什么建议吗?
  • @Vincent:你能发布一个你损坏的 JSON 输入的例子吗?
  • @Vincent:JSON 验证器 (jsonlint.com) 认为它是有效的 JSON。看起来您还需要发布失败的 PHP 代码。请制作一个功能齐全、可重现失败的代码示例。
猜你喜欢
  • 2013-03-04
  • 1970-01-01
  • 2014-07-25
  • 1970-01-01
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-03
相关资源
最近更新 更多