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






相关文章
|
2月前
|
缓存 安全 PHP
PHP中的魔术方法与对象序列化
本文将深入探讨PHP中的魔术方法,特别是与对象序列化和反序列化相关的__sleep()和__wakeup()方法。通过实例解析,帮助读者理解如何在实际应用中有效利用这些魔术方法,提高开发效率和代码质量。
|
17天前
|
PHP
PHP中如何比较两个对象
在 PHP 中,比较两个对象可依据状态(属性值)或身份(内存地址)。常用方法包括:1. 使用 `==` 比较属性值;2. 使用 `===` 比较身份和属性;3. 实现 `__equals()` 方法自定义比较逻辑;4. 使用 `spl_object_hash()` 比较对象身份;5. 手动比较属性。选择方法依需求而定。
|
4月前
|
JSON JavaScript 前端开发
JavaScript实现字符串转json对象的方法
JavaScript实现字符串转json对象的方法
|
1月前
|
JSON 缓存 前端开发
PHP如何高效地处理JSON数据:从编码到解码
在现代Web开发中,JSON已成为数据交换的标准格式。本文探讨了PHP如何高效处理JSON数据,包括编码和解码的过程。通过简化数据结构、使用优化选项、缓存机制及合理设置解码参数等方法,可以显著提升JSON处理的性能,确保系统快速稳定运行。
|
2月前
|
JSON 前端开发 JavaScript
json字符串如何转为list对象?
json字符串如何转为list对象?
346 7
|
2月前
|
JSON JavaScript 前端开发
js如何格式化一个JSON对象?
js如何格式化一个JSON对象?
107 3
|
3月前
|
XML JSON JavaScript
JSON对象的stringify()和parse()方法使用
本文阐述了JSON对象的`stringify()`和`parse()`方法的用法,包括如何将JavaScript对象转换为JSON字符串,以及如何将JSON字符串解析回JavaScript对象,并讨论了转换过程中需要注意的事项。
JSON对象的stringify()和parse()方法使用
|
3月前
|
SQL 关系型数据库 数据库连接
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
本文介绍了PHP中PDO(PHP Data Objects)扩展的基本概念和使用方法。内容包括PDO类和PDOStatement类的介绍,PDO的简单使用,预定义占位符的使用方法,以及PDOStatement对象的使用。文章还讨论了绑定预定义占位符参数的不同形式,即bindValue和bindParam的区别。通过具体示例,展示了如何使用PDO进行数据库连接、数据查询、数据插入等操作。
php连接数据库之PDO,PDO的简单使用和预定义占位符的使用以及PDOStatement对象的使用,占位符的不同形式,bindValue和bindParam绑定预定义占位符参数的区别
|
3月前
|
JSON 前端开发 中间件
React读取properties配置文件转化为json对象并使用在url地址中
本文介绍了如何在React项目中读取properties配置文件,将其内容转化为JSON对象,并在请求URL地址时使用这些配置。文章详细说明了异步读取文件、处理字符串转换为JSON对象的过程,并提供了一个封装函数,用于在发起请求前动态生成配置化的URL地址。
97 1
|
3月前
|
PHP
PHP中如何比较两个对象
PHP中如何比较两个对象
下一篇
DataWorks