php生成返回json对象数组

注意两种方法生成的对象数组在结构上的区别

$jarr=array(

'total' => 239,

'list' => array(

array(

'code'=>'001',

'name'=>'中国',

'addr'=>'Address 11',

'col4'=>'col4 data'

),

array(

'code'=>'002',

'name'=>'Name 2',

'addr'=>'Address 12',

'col4'=>'col4 data'

),

)

);

?>

php生成返回json对象数组(方法一)

$jobj=new stdclass(); //实例化stdclass,这是php内置的空类,可以用来传递数据,由于json_decode后的数据是以对象数组的形式存放的,所以我们生成的时候也要把数据存储在对象中。

foreach($jarr as $key=>$value){

$jobj->$key=$value;

}

print_r($jobj);//打印传递属性后的对象

echo'使用$jobj->list[0][\'code\']输出数组元素:'.$jobj->list[0]['code'].'
';

echo'编码后的json字符串:'.json_encode($jobj).'
';

?>


php生成返回json对象数组(方法二)

echo'编码后的json字符串:';

echo $str=json_encode($jarr);//将数组进行json编码

echo'
';

$arr=json_decode($str);//再进行json解码

print_r($arr);//打印解码后的数组,数据存储在对象数组中

echo'使用$arr->list[0]->code输出数组元素:'.$arr->list[0]->code;

?>

改下

你会发现上面虽然我页面和传入字符对定义了为UTF-8,为什么生成的json数据还是乱码:

"name":"\u4e2d\u56fd".....

现在想办法将这串不知道什么的转为中文:

解决方法是用urlencode()函数处理以下,在json_encode之前,把所有数组内所有内容都用urlencode()处理一下,然用json_encode()转换成json字符串,最后再用urldecode()将编码过的中文转回来。/**************************************************************

*

* 使用特定function对数组中所有元素做处理

* @param string &$array 要处理的字符串

* @param string $function 要执行的函数

* @return boolean $apply_to_keys_also 是否也应用到key上

* @access public

*

*************************************************************/

function arrayRecursive(&$array, $function, $apply_to_keys_also = false){

static $recursive_counter = 0;

if (++$recursive_counter > 1000) {

die('possible deep recursion attack');

}

foreach ($array as $key => $value) {

if (is_array($value)) {

arrayRecursive($array[$key], $function, $apply_to_keys_also);

} else {

$array[$key] = $function($value);

}

if ($apply_to_keys_also && is_string($key)) {

$new_key = $function($key);

if ($new_key != $key) {

$array[$new_key] = $array[$key];

unset($array[$key]);

}

}

}

$recursive_counter--;

}

/**************************************************************

*

* 将数组转换为JSON字符串(兼容中文)

* @param array $array 要转换的数组

* @return string 转换得到的json字符串

* @access public

*

*************************************************************/

function JSON($array) {

arrayRecursive($array, 'urlencode', true);

$json = json_encode($array);

return urldecode($json);

}

echo JSON($jarr);

这次成功了,运行结果如下:

{"total":"239","list":[{"code":"001","name":"中国","addr":

php返回json数组元素,php生成返回json对象数组(json支持中文)相关推荐

  1. 数组的存储与初始化、对象数组、数组作为函数参数

    数组的存储 数组在内存中是一组连续的内存单元,也就是说数组元素是连续存储的.数组名是数组所占内存的首地址. 一维数组是按照下标的顺序存储的,而对多维数组就复杂些,以一定的约定顺序将多维数组存储在连续的 ...

  2. 不懂就问--Java基本数据类型与数组(定义了int型二维数组a[6][7]后,数组元素a[3][4]前的数组元素个数)案例分析

    首先要知道java中的数组是线性排列的 其次要知道数组的初始标度为0 例如定义了一个二维数组 a[1][2],则数组详细为 [0][0]: [0][1]: [0][2]: [1][0]: [1][1] ...

  3. matlab数组元素的比较大小排序,MATLAB数组元素的排序

    MATLAB sort() 函数用来对数组元素进行排序,它有以下几种常见的用法: B = sort(A)  %使用默认规则对数组排序 B = sort(A, dim)  %dim指定排序的维度 B = ...

  4. python生成随机数组_python3.x 生成3维随机数组实例

    python3.x 生成3维随机数组实例 如下所示: import numpy as np a=np.random.randint(0,10,size=[3,3,3]) print(a) 以上这篇py ...

  5. python添加数组元素_Python列表附录–如何向数组添加元素,并附带示例说明

    python添加数组元素 欢迎 (Welcome) Hi! If you want to learn how to use the append() method, then this article ...

  6. java数组元素的排序_java学习之数组元素排序,冒泡排序和选择排序

    java学习之数组元素排序 选择排序 *返回值类型 void *参数列表 int[] arr * 分析:选择排序 * 第一次arr[0]与arr[1-4]比较,总共比较4次 * 第二次arr[1]与a ...

  7. python统计数组元素个数_统计二维数组里元素的个数

    记录一下一个问题的解决,里面涉及几个函数的用法,当作复习啦. 先说明一下问题.数据表里面的字段 content 存储了一个以逗号分割的字符串,最大有20个数,最大数字为40.比如3,24,33,40类 ...

  8. php删除二维数组元素_php怎样删除二维数组中的元素

    php怎样删除二维数组中的元素 发布时间:2020-11-03 10:22:40 来源:亿速云 阅读:68 作者:小新 这篇文章主要介绍了php怎样删除二维数组中的元素,具有一定借鉴价值,需要的朋友可 ...

  9. php数组元素转字符串,php怎么把数组转成字符串?

    在php中,可以使用implode()函数来把数组转成字符串,它可以将一个一维数组转化为字符串:语法格式为"implode(array)",会返回一个由array数组元素组合成的字 ...

最新文章

  1. 关于亿级账户数据迁移,你应该试试这种方法...
  2. ipfs浏览器java实现_IPFS + Ethereum(上篇):JS+IPFS-API存储和获取数据
  3. WSAAsyncSelect模型
  4. 使用C#实现Windows下无焦点窗体
  5. 智能水杯设计方案_智能水杯盖方案开发
  6. 【转】ABP源码分析十二:本地化
  7. qmlcanvas绘制3d图形_透视Matplotlib核心功能和工具包 - 绘制3D图形
  8. NOIP2013/day1/1/转圈游戏
  9. docker-compose搭建ghost博客系统
  10. C#静态方法与非静态方法的比较 <转载>
  11. git学习(八)pull,fetch,merge
  12. 开发库比较(3) - Mobile Web 开发 - Sencha, jquerymobiel, phonejs, jqtouch, jqmobi
  13. Mac基础操作:在双显示器设置中将Dock保持在一个屏幕上以防止其移动的方法
  14. DOM事件学习之兼容中文输入法
  15. 使用httpclient进行文件下载
  16. c语言中(char)的用法,c语言中char的用法是什么意思.docx
  17. 24个关键词致敬科比系列之——凌晨四点
  18. roslaunch的.launch文件的标签总结
  19. 不是抽象的, 并且未覆盖Handler中的抽象方法
  20. 开发者必须mark的一款2D移动游戏开发工具

热门文章

  1. 电子商务计算机网络的分类可分为,电子商务员基础知识:计算机网络的分类与拓扑结构...
  2. mysql1000w数据怎么加索引_给mysql一百万条数据的表添加索引
  3. .NET Core Web API:您需要了解的最少知识(第1部分,共2部分)
  4. Windows Terminal 0.9 发布
  5. WiFi 6 目前还不适合个人用户
  6. 用于CRUD和更多的模型驱动的RESTful API
  7. 青岛计算机学校分数线,青岛计算机应用与维修专业职业学校收费标准,物联网应用技术中专学校分数线...
  8. html5画安卓机器人,HTML5用户笔画形状检测机器人
  9. java 值 继承_java中继承的数值传递引用
  10. 使用图形界面Anaconda创建新环境的一个小问题