码迷,mamicode.com
首页 > Windows程序 > 详细

json_encode在设计api时需要注意的问题

时间:2015-05-31 22:57:45      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

在设计api时我们经常会使用关联数组,例如:我要返回给客户端主题信息和主题包列表

原始数组格式

$arr = array(
    100=>array(‘themeName‘=>‘a‘,‘files‘=>array(‘1.jpg‘,‘2.jpg‘)),
    200=>array(‘themeName‘=>‘b‘,‘files‘=>array(‘1.jpg‘,‘2.jpg‘)),
    300=>array(‘themeName‘=>‘c‘,‘files‘=>array(‘1.jpg‘,‘2.jpg‘)),
);

我们希望返回给客户端这样的数据

[
  {‘themeName‘=>‘a‘, files:[1.rar,2.rar]},
  {‘themeName‘=>‘b‘, files:[1.rar,2.rar]},
  {‘themeName‘=>‘c‘, files:[1.rar,2.rar]},
]

而json_encode给我们的是这样的数据

{
  ‘100‘=>{‘themeName‘=>‘a‘, files:[1.rar,2.rar]},
  ‘200‘=>{‘themeName‘=>‘b‘, files:[1.rar,2.rar]},
  ‘300‘=>{‘themeName‘=>‘c‘, files:[1.rar,2.rar]},
}

在php中的数字索引数组对应js的[],关联数组对应js的{},看两个示例

php数值索引数组

$arr = array(1,2,3);
echo json_encode($arr);

output

[1,2,3]

php关联数组

$arr = array(1=>array(1,2,3),2=>array(4,5,6),3=>array(7,8,9));
echo json_encode($arr);

output

{"1":[1,2,3],"2":[4,5,6],"3":[7,8,9]}

要解决这个问题需要把“关联数组”转换成“数字数组”,例如

$arr = array(
    100=>array(‘themeName‘=>‘a‘,‘files‘=>array(‘1.jpg‘,‘2.jpg‘)),
    200=>array(‘themeName‘=>‘b‘,‘files‘=>array(‘1.jpg‘,‘2.jpg‘)),
    300=>array(‘themeName‘=>‘c‘,‘files‘=>array(‘1.jpg‘,‘2.jpg‘)),
);
$arr = array_merge(array(),$arr);
echo json_encode($arr);

使用array_merge函数和空数组合并就可以转换成数组数组了,这种方法的好处是可以保留数组的原始顺序

output

[{"themeName":"a","files":["1.jpg","2.jpg"]},{"themeName":"b","files":["1.jpg","2.jpg"]},{"themeName":"c","files":["1.jpg","2.jpg"]}]

也可以使用shuffle把数组打乱,但这样会破坏数组的顺序,例如

$arr = array(
    100=>array(‘themeName‘=>‘a‘,‘files‘=>array(‘1.jpg‘,‘2.jpg‘)),
    200=>array(‘themeName‘=>‘b‘,‘files‘=>array(‘1.jpg‘,‘2.jpg‘)),
    300=>array(‘themeName‘=>‘c‘,‘files‘=>array(‘1.jpg‘,‘2.jpg‘)),
);
shuffle($arr);
echo json_encode($arr);

 

json_encode在设计api时需要注意的问题

标签:

原文地址:http://www.cnblogs.com/phpfans/p/4542766.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!