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截取中文字符

  • 相关阅读:
    【C++】资源管理
    【Shell脚本】逐行处理文本文件
    【算法题】rand5()产生rand7()
    【Shell脚本】字符串处理
    Apple iOS产品硬件参数. 不及格的程序员
    与iPhone的差距! 不及格的程序员
    iPhone游戏 Mr.Karoshi"过劳死"通关. 不及格的程序员
    XCode V4 发布了, 苹果的却是个变态. 不及格的程序员
    何时readonly 字段不是 readonly 的?结果出呼你想象!!! 不及格的程序员
    object file format unrecognized, invalid, or unsuitable Command 不及格的程序员
  • 原文地址:https://www.cnblogs.com/phpfans/p/4542766.html
Copyright © 2011-2022 走看看