php生成返回json对象数组(json支持中文)

简介:

php生成返回json对象数组


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<h1>注意两种方法生成的对象数组在结构上的区别</h1>
<?php
$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'
         ),
     )
);
?>
<h1>php生成返回json对象数组(方法一)</h1>
<?php
$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' ]. '<br>' ;
echo '编码后的json字符串:' .json_encode( $jobj ). '<br>' ;
?>
<pre />
<hr />
<pre />
<h1>php生成返回json对象数组(方法二)</h1>
<?php
echo '编码后的json字符串:' ;
echo  $str =json_encode( $jarr ); //将数组进行json编码
echo '<br>' ;
$arr =json_decode( $str ); //再进行json解码
print_r( $arr ); //打印解码后的数组,数据存储在对象数组中
echo '使用$arr->list[0]->code输出数组元素:' . $arr ->list[0]->code;
?>


wKiom1MYN2OTQEC4AAPwCGKxQ7A683.jpg



改下

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

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

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


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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
/**************************************************************
  *
  *  使用特定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":







      本文转自许琴 51CTO博客,原文链接:http://blog.51cto.com/xuqin/1194989,如需转载请自行联系原作者






相关文章
|
PHP C++ 索引
PHP 高效之道:字符串与数组处理的实用技巧
PHP 高效之道:字符串与数组处理的实用技巧
417 83
|
JSON 数据处理 PHP
PHP数组处理技巧:高效操作数据集合
PHP数组处理技巧:高效操作数据集合
|
JSON 安全 大数据
PHP中的数组处理艺术:灵活高效的数据操作
PHP中的数组处理艺术:灵活高效的数据操作
|
大数据 数据处理 PHP
PHP中的数组过滤与映射:高效数据处理技巧
PHP中的数组过滤与映射:高效数据处理技巧
|
存储 JSON PHP
PHP数组键值转换的隐秘陷阱:整数还是字符串?
PHP数组键值转换的隐秘陷阱:整数还是字符串?
343 58
|
JSON 定位技术 PHP
PHP技巧:解析JSON及提取数据
这就是在PHP世界里探索JSON数据的艺术。这场狩猎不仅仅是为了获得数据,而是一种透彻理解数据结构的行动,让数据在你的编码海洋中畅游。通过这次冒险,你已经掌握了打开数据宝箱的钥匙。紧握它,让你在编程世界中随心所欲地航行。
358 67
|
JSON IDE Java
鸿蒙开发:json转对象插件回来了
首先,我重新编译了插件,进行了上传,大家可以下载最新的安装包进行体验了,还是和以前一样,提供了在线版和IDE插件版,两个选择,最新的版本,除了升级了版本,兼容了最新的DevEco Studio ,还做了一层优化,就是针对嵌套对象和属性的生成,使用方式呢,一年前的文章中有过详细的概述,这里呢也简单介绍一下。
422 4
鸿蒙开发:json转对象插件回来了
|
PHP 开发者 索引
探究PHP中常见数组操作函数
在编码实践中,合理利用这些数组操作函数可以简化编程工作,提升代码的效率和可读性。为达到最佳实践,开发者应该通过阅读官方文档来深入理解每个函数的工作原理以及如何在不同的场景下运用它们。
481 8
|
测试技术 PHP 开发者
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
PHP 数组查找:为什么 `isset()` 比 `in_array()` 快得多?
|
存储 监控 算法
关于员工上网监控系统中 PHP 关联数组算法的学术解析
在当代企业管理中,员工上网监控系统是维护信息安全和提升工作效率的关键工具。PHP 中的关联数组凭借其灵活的键值对存储方式,在记录员工网络活动、管理访问规则及分析上网行为等方面发挥重要作用。通过关联数组,系统能高效记录每位员工的上网历史,设定网站访问权限,并统计不同类型的网站访问频率,帮助企业洞察员工上网模式,发现潜在问题并采取相应管理措施,从而保障信息安全和提高工作效率。
271 7

热门文章

最新文章