所有
我使用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"
}
}
}
}
}
答案 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()
会报告解码失败的原因。