这是一种非标准的json
格式api:
WebInfo ({
"name": "Google",
"code": 1,
"domain": "http://www.google.com/",
})
由于数据不是标准JSON,json_decode()
无法直接解析,我该怎么做才能使其成为有效的json
格式?
答案 0 :(得分:2)
您必须删除可以使用str_replace()
WebInfo (
和)
试试这个:让我们假设你的WebInfo({...})
字符串是$str
然后执行此操作:
$str = str_replace('WebInfo(', '', $str);
$str = str_replace(' )', '', $str);
print_r(json_decode($str, true));
警告: str_replace()
将删除字符串中提到的每个字符。例如:如果我使用类似
str_replace('hello', 'hi', $str);
然后它会将hello
中的每个hi
替换为$str
。
答案 1 :(得分:1)
这看起来有点JSONP-ish,所以它实际上应该是有效的JSON,除了它包含在一个函数调用中。但是"domain": "http://www.google.com/",
末尾的逗号肯定不属于那里。
你有几种方法可以解决这个问题:
仅当您知道函数名称时才有效。因此,如果您知道它将始终包含WebInfo(...)
,您可以只提取JSON部分子字符串:
$jsonPart = substr($jsonpString, 8, -1);
其中8是“WebInfo(”和“-1”在最后处理“)”的长度。
只需解析第一个“{”和最后一个“}”之间的所有内容:
preg_match("/\{(.*)\}/s", $jsonpString, $matches);
由于只应该有一个匹配,所以你抓住第一个:
$jsonPart = $matches[0];
使用这种方法,您不需要知道包装函数名称的名称/长度。但是你仍然需要处理上面提到的那个尾随的逗号。是真的存在还是只是复制粘贴错误?