zoukankan      html  css  js  c++  java
  • json_encode在设计api时需要注意的问题

    1. 在设计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);

    2. 截取字符中文字符时要注意的问题

    如果json串中有乱码,解析json就会报错,用substr截取中文会出现乱码的情况,应尽量使用多字节截取函数mb_substr截取中文字符

  • 相关阅读:
    iPhone的Socket编程使用开源代码之AsyncSocket
    利用 NSSortDescriptor 对 NSMutableArray 排序
    objectc NSMutableURLRequest模拟表单提交
    Asp.net读取Excel文件 2
    把aspx绑定的数据搬至aspx.cs页面中去
    Asp.net网站如何播放Flv视频
    如何使用Flash对象去显示图片
    Could not load file or assembly 'Microsoft.ReportViewer.WebForms' or 'Microsoft.ReportViewer.Common'
    动态添加HtmlGenericControl
    Could not load file or assembly 'Microsoft.ReportViewer.ProcessingObjectModel'
  • 原文地址:https://www.cnblogs.com/phpfans/p/4542766.html
Copyright © 2011-2022 走看看