2010-06-11 151 views
0

我有一组使用的print_r($ VAR)时,看起来像这样的数据:需要帮助解码JSON和XML

cbfunc({"query":{"count":"12","created":"2010-06-11T01:20:19Z","lang":"en-US"},"results":["\n 238.l.739089.t.4<\/team_key>\n 4<\/team_id>\n CHEE-HOO!!!<\/name>"]}); 

它看起来像JSON我,所以我试着使用json_decode但不能正确的。我的目标是打印在“结果”中找到的xml数据。

任何有用的指针将不胜感激。

+1

这是JSONP(JSON与填充)。 – 2010-06-11 02:17:33

+0

是否有任何理由为什么你从YQL获取JSONP-X响应而不是普通的XML或纯JSON? – salathe 2010-06-11 08:16:14

+0

@salathe我不完全确定我为什么得到这样的回应。我一直在使用http://github.com/joechung/oauth_yahoo进行我的yql调用。尽管如此,你对知道它的yql非常敏锐! :) – brant 2010-06-11 14:42:16

回答

1

由于ZZ编码器的响应,我想出溶液

根据comment on the json function at PHP的JSONP需要被转换到JSON(无填充。 )通过一个方便的preg_replac è...

$var=preg_replace('/.+?({.+}).+/','$1',$var); 

然后,JSON可以解析到打印结果数据:

$obj = json_decode($var, true); 
print $obj["results"][0]; 
1

它看起来像被包裹在回调cbfunc。所以你需要剥去它,然后才能运行json_decode。

尝试

$decode_this = substr($var, 6, -1); 

你不显示responseText的结束,但上面的代码片断应该给你回调的开始“cbfunc(”和最后一个字符,独家之间的一切。你可能有将其改变为-2如果还有一个;等等

+0

感谢您的回复。我尝试了你的建议,但仍然没有运气。尽管我找到了将JSONP转换为JSON的解决方案: – brant 2010-06-11 02:45:58