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,如需转载请自行联系原作者






相关文章
|
16小时前
|
Java 程序员 PHP
PHP对象和类
PHP对象和类
22 0
|
16小时前
|
Web App开发 JSON JavaScript
SAP UI5 应用程序小技巧 - 一键将 JSON 对象导出成本地 json 文件
SAP UI5 应用程序小技巧 - 一键将 JSON 对象导出成本地 json 文件
29 0
|
16小时前
|
JSON PHP 数据格式
|
16小时前
|
存储 JSON 安全
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
71 0
|
16小时前
|
JSON 数据格式
JSON对象相互转换
JSON对象相互转换
9 3
|
16小时前
|
存储 JSON DataWorks
DataWorks产品使用合集之DataWorks将 MongoDB 中的数组类型写入到 DataWorks 的单个字段时,表示为字符串格式而非 JSON 格式如何解决
DataWorks作为一站式的数据开发与治理平台,提供了从数据采集、清洗、开发、调度、服务化、质量监控到安全管理的全套解决方案,帮助企业构建高效、规范、安全的大数据处理体系。以下是对DataWorks产品使用合集的概述,涵盖数据处理的各个环节。
26 3
|
16小时前
|
存储 PHP 数据库
【PHP开发专栏】PHP数组操作与常见函数
【4月更文挑战第29天】本文介绍了PHP中的数组及其操作,包括定义与初始化、访问与修改、遍历。还探讨了常用的数组函数,如count()、in_array()、array_push/pop()、array_shift/unshift()、array_merge()、array_keys/values()以及sort()和rsort(),帮助开发者更有效地处理和操作数组。
|
16小时前
|
JSON Java 数据处理
Spring Boot与Jsonson对象:灵活的JSON操作实战
【4月更文挑战第28天】在现代Web应用开发中,JSON数据格式的处理至关重要。假设 "Jsonson" 代表一个类似于Jackson的库,这样的工具在Spring Boot中用于处理JSON。本篇博客将介绍Spring Boot中处理JSON数据的基本概念,并通过实际例子展示如何使用类似Jackson的工具进行数据处理。
26 0
|
16小时前
|
JSON C语言 数据格式
C语言与lua通过json对象交互
C语言与lua通过json对象交互
20 1
|
16小时前
|
JSON 数据格式
Json字符串与QVariantList 对象相互转换
Json字符串与QVariantList 对象相互转换
11 0

热门文章

最新文章