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






相关文章
|
1月前
|
Java 程序员 PHP
PHP对象和类
PHP对象和类
19 0
|
2月前
|
Web App开发 JSON JavaScript
SAP UI5 应用程序小技巧 - 一键将 JSON 对象导出成本地 json 文件
SAP UI5 应用程序小技巧 - 一键将 JSON 对象导出成本地 json 文件
25 0
|
3月前
|
JSON PHP 数据格式
|
25天前
|
存储 JSON 安全
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
【C++ JSON库 json值的创建手段】深入探究C++中JSON对象定位与操作:从引用到回调函数
60 0
|
16天前
|
JSON C语言 数据格式
C语言与lua通过json对象交互
C语言与lua通过json对象交互
15 1
|
17天前
|
JSON 数据格式
Json字符串与QVariantList 对象相互转换
Json字符串与QVariantList 对象相互转换
6 0
|
1月前
|
存储 JSON JavaScript
Python如何解析json对象?
Python如何解析json对象?
23 1
|
1月前
|
JSON JavaScript PHP
PHP把unicode编码的json字符串转中文
PHP把unicode编码的json字符串转中文
13 0
|
2月前
|
SQL JSON Apache
Flink问题之嵌套 json 中string 数组的解析异常如何解决
Apache Flink是由Apache软件基金会开发的开源流处理框架,其核心是用Java和Scala编写的分布式流数据流引擎。本合集提供有关Apache Flink相关技术、使用技巧和最佳实践的资源。
219 1
|
2月前
|
存储 JSON 前端开发
让你的对象变得拗口:JSON.stringify(),我把对象夹进了 JSON 魔法帽!
在 JavaScript 中,JSON.stringify() 是一个内置函数,用于将 JavaScript 对象转换为 JSON 字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛用于前后端数据传输和存储。本文将详细介绍 JSON.stringify() 的属性、应用场景,并提供一个完整而优雅的实现,处理循环引用、特殊类型(如日期和正则表达式)以及性能相关的问题。同时,我们还将讨论注意事项和相关引用资料。