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

json_encode在设计api时需要注意的问题的更多相关文章

  1. Web API核查表:设计、测试、发布API时需思考的43件事[转]

    Web API核查表:设计.测试.发布API时需思考的43件事   当设计.测试或发布一个新的Web API时,你是在一个原有的复杂系统上构建新的系统.那么至少,你也要建立在HTTP上,而HTTP则是 ...

  2. 如何为非常不确定的行为(如并发)设计安全的 API,使用这些 API 时如何确保安全

    原文:如何为非常不确定的行为(如并发)设计安全的 API,使用这些 API 时如何确保安全 .NET 中提供了一些线程安全的类型,如 ConcurrentDictionary<TKey, TVa ...

  3. 好的框架需要好的 API 设计 —— API 设计的六个原则

    说到框架设计,打心底都会觉得很大很宽泛,而 API 设计是框架设计中的重要组成部分.相比于有很多大佬都认可的面向对象的六大原则.23 种常见的设计模式来说,API 设计确实缺少行业公认的原则或者说设计 ...

  4. 14.app后端如何设计api

    app和后端的交互,一般都是通过后端提供的api实现.api的设计,估计很多刚进入app后端的小伙伴会一无头绪,不知道怎么入门.下面根据自己3年的app后端经验,总结出下几个api设计原则,给小伙伴参 ...

  5. 微服务设计 - api版本控制

    要描述了几种API版本控制的方法.用户可以查询原始的API,或者添加定制的头文件来接收特定的版本.如果应用程序收到一个重大修订,将URI修改为V2.在进行迭代改进时,将创建与更改日期相一致的端点,并允 ...

  6. flask插件系列之flask_restful设计API

    前言 flask框架默认的路由和视图函数映射规则是通过在视图函数上直接添加路由装饰器来实现的,这使得路由和视图函数的对应关系变得清晰,但对于统一的API开发就变得不怎么美妙了,尤其是当路由接口足够多的 ...

  7. Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql

    Atitit.自定义存储引擎的接口设计 api 标准化 attilax 总结  mysql 1. 图16.1:MySQL体系结构1 2. 16.7. 创建表create()虚拟函数:2 3. 16.8 ...

  8. API生命周期第二阶段——设计:如何设计API(基于swagger进行说明)

    题外话 在新的项目中,推行了swagger用于对API的设计.以期待解决我们上篇博客中说到了一些现象,提升工作效率.那么,结合到当时和全项目组成员做培训,以及后续的给主要应用者做培训,以及当初自己接触 ...

  9. 设计 api, url 的原则

    设计 api, url 的原则 做微信公众号的项目,账号体系使用微信的 openid.现在增加需求,要求适应 web 端--做成普通的 web 项目.然后 url 的变化:我想给现有的 url 加上 ...

随机推荐

  1. Spring和MyBatis的集成

    Spring和MyBatis的整合   1. Spring和各个框架的整合 Spring目前是JavaWeb开发中最终的框架,提供一站式服务,可以其他各个框架整合集成 Spring整合方案 1.1.  ...

  2. Python——课程数据统计分析

    介绍 在该章节中我们将利用提供的课程数据来进行一次实战性质的时间序列和聚类分析. 知识点 数据处理 数据可视化 中文分词 文本聚类 数据概览 本次课程的数据来源于运行过程中产生的真实数据,我们对部分数 ...

  3. Entity Framework实现属性映射约定

    Entity Framework Code First属性映射约定中“约定”一词,在原文版中为“Convention”,翻译成约定或许有些不好理解,这也是网上比较大多数的翻译,我们就当这是Entity ...

  4. CodeForces 438D The Child and Sequence (线段树 暴力)

    传送门 题目大意: 给你一个序列,要求在序列上维护三个操作: 1)区间求和 2)区间取模 3)单点修改 这里的操作二很讨厌,取模必须模到叶子节点上,否则跑出来肯定是错的.没有操作二就是线段树水题了. ...

  5. 三十五、lamp经典组合搭建

    一.安装mysql数据库 1.1  创建组和用户: 1)groupadd mysql 2)useradd mysql   -g mysql -M  -s  /sbin/nologin 3)config ...

  6. SAP PM:参考维护工单创建测量凭证

    (1)使用FM:CO_BC_ORDER_POST获取工单资料(Aufnr, aufpo and materials etc): (2)使用FM:MEASUREM_DOCUM_RFC_SINGLE_00 ...

  7. GlobalExceptionHandler @ControllerAdvice

    package org.linlinjava.litemall.core.config; import org.apache.commons.logging.Log; import org.apach ...

  8. maven setting.xml说明

    <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://mav ...

  9. kettle的基本使用

    一.下载下载kettlehttp://sourceforge.net/projects/pentaho/files/Data%20Integration/7.0/pdi-ce-7.0.0.0-25.z ...

  10. html,将元素水平,垂直居中的四种方式

    将元素垂直,水平居中分两种情况:一个是元素尺寸固定,二是元素尺寸不固定 一.尺寸固定 方法1:定位 ,50%,margin负距 .box{ width: 400px; height: 300px; b ...