使用json和php在子数组中输出http://地址时出现问题

时间:2010-06-14 23:55:48

标签: php json

我试图实现像这样的输出

{"status":"ok","0":{"id":"11","title":"digg","url":"http://www.digg.com"}}

但我得到了这个

{"status":"ok","0":{"id":"11","title":"digg","url":"http:\/\/www.digg.com"}}

这是用于生成json的php代码

$links = array('id'=>'11','title'=>'digg','url'=>"http://www.digg.com");
$msg = array('status'=>'ok',$links);
echo json_encode($msg);

知道造成这种情况的原因是什么?

更新 我应该更清楚 如果你注意到实际的url,它会在输出中的“/”之前插入“\”。这应该发生,还是有办法阻止这个?

2 个答案:

答案 0 :(得分:2)

是。 JSON specs

答案 1 :(得分:2)

它们都是等效的JSON,所以它无关紧要。 JSON字符串:

"http://www.digg.com"

"http:\/\/www.digg.com"

都解码为:

"http://www.digg.com"

这是一个单独的问题,但我更愿意:

$links = array(array('id'=>'11','title'=>'digg','url'=>"http://www.digg.com"));
$msg = array('status'=>'ok', 'links'=>$links);
echo json_encode($msg);

{"status":"ok","links":[{"id":"11","title":"digg","url":"http:\/\/www.digg.com"}]}

这对我来说比拥有“0”键更有意义,如果你添加更多网站,它会很好地扩展:

$links = array(array('id'=>'11','title'=>'digg','url'=>"http://www.digg.com"),
               array('id'=>'12','title'=>'reddit','url'=>"http://www.reddit.com"));
$msg = array('status'=>'ok', 'links'=>$links);
echo json_encode($msg);

{"status":"ok","links":[{"id":"11","title":"digg","url":"http:\/\/www.digg.com"},
{"id":"12","title":"reddit","url":"http:\/\/www.reddit.com"}]}