如何让phpjs读取php返回的jsonn

11905人阅读
php 的json_encode能把数组转换为json格式的字符串。字符串没有缩进,中文会转为unicode编码,例如\u975a\u4ed4。人阅读比较困难。现在这个方法在json_encode的基础上再进行一次美化处理。使人能方便阅读内容。
1. 使用 json_encode 输出
header('content-type:application/charset=utf8');
$arr = array(
'status' =& true,
'errMsg' =& '',
'member' =&array(
'name' =& '李逍遥',
'gender' =& '男'
'name' =& '赵灵儿',
'gender' =& '女'
echo json_encode($arr);
{&status&:true,&errMsg&:&&,&member&:[{&name&:&\u674e\u900d\u9065&,&gender&:&\u7537&},{&name&:&\u8d75\uf&,&gender&:&\u5973&}]}可以看出,这种格式人阅读很困难。
2. 使用 jsonFormat 输出
/** Json数据格式化
String $indent 缩进字符,默认4个空格
* @return JSON
function jsonFormat($data, $indent=null){
// 对数组中每个元素递归进行urlencode操作,保护中文字符
array_walk_recursive($data, 'jsonFormatProtect');
// json encode
$data = json_encode($data);
// 将urlencode的内容进行urldecode
$data = urldecode($data);
// 缩进处理
$ret = '';
$length = strlen($data);
$indent = isset($indent)? $indent : '
$newline = &\n&;
$prevchar = '';
$outofquotes =
for($i=0; $i&=$ $i++){
$char = substr($data, $i, 1);
if($char=='&' && $prevchar!='\\'){
$outofquotes = !$
}elseif(($char=='}' || $char==']') && $outofquotes){
for($j=0; $j&$ $j++){
if(($char==',' || $char=='{' || $char=='[') && $outofquotes){
if($char=='{' || $char=='['){
for($j=0; $j&$ $j++){
$prevchar = $
/** 将数组元素进行urlencode
* @param String $val
function jsonFormatProtect(&$val){
if($val!==true && $val!==false && $val!==null){
$val = urlencode($val);
header('content-type:application/charset=utf8');
$arr = array(
'status' =& true,
'errMsg' =& '',
'member' =&array(
'name' =& '李逍遥',
'gender' =& '男'
'name' =& '赵灵儿',
'gender' =& '女'
echo jsonFormat($arr);
&status&:true,
&errMsg&:&&,
&member&:[
&name&:&李逍遥&,
&gender&:&男&
&name&:&赵灵儿&,
&gender&:&女&
php5.4&以后,json_encode增加了JSON_UNESCAPED_UNICODE ,
JSON_PRETTY_PRINT 等几个常量参数。使显示中文与格式化更方便。
header('content-type:application/charset=utf8');
$arr = array(
'status' =& true,
'errMsg' =& '',
'member' =&array(
'name' =& '李逍遥',
'gender' =& '男'
'name' =& '赵灵儿',
'gender' =& '女'
echo json_encode($arr, JSON_UNESCAPED_UNICODE|JSON_PRETTY_PRINT);
&status&: true,
&errMsg&: &&,
&member&: [
&name&: &李逍遥&,
&gender&: &男&
&name&: &赵灵儿&,
&gender&: &女&
JSON常量参数说明:
以下常量表示了 json_last_error() 所返回的错误类型。
JSON_ERROR_NONE (integer)
没有错误发生。自 PHP 5.3.0 起生效。
JSON_ERROR_DEPTH (integer)
到达了最大堆栈深度。自 PHP 5.3.0 起生效。
JSON_ERROR_STATE_MISMATCH (integer)
出现了下溢(underflow)或者模式不匹配。自 PHP 5.3.0 起生效。
JSON_ERROR_CTRL_CHAR (integer)
控制字符错误,可能是编码不对。自 PHP 5.3.0 起生效。
JSON_ERROR_SYNTAX (integer)
语法错误。 自 PHP 5.3.0 起生效。
JSON_ERROR_UTF8 (integer)
异常的 UTF-8 字符,也许是因为不正确的编码。 此常量自 PHP 5.3.1 起生效。
下面的常量可以和 json_encode() 的 form 选项结合使用。
JSON_HEX_TAG (integer)
所有的 & 和 & 转换成 \u003C 和 \u003E。 自 PHP 5.3.0 起生效。
JSON_HEX_AMP (integer)
所有的 & 转换成 \u0026。 自 PHP 5.3.0 起生效。
JSON_HEX_APOS (integer)
所有的 ' 转换成 \u0027。 自 PHP 5.3.0 起生效。
JSON_HEX_QUOT (integer)
所有的 & 转换成 \u0022。 自 PHP 5.3.0 起生效。
JSON_FORCE_OBJECT (integer)
使一个非关联数组输出一个类(Object)而非数组。 在数组为空而接受者需要一个类(Object)的时候尤其有用。 自 PHP 5.3.0 起生效。
JSON_NUMERIC_CHECK (integer)
将所有数字字符串编码成数字(numbers)。 自 PHP 5.3.3 起生效。
JSON_BIGINT_AS_STRING (integer)
将大数字编码成原始字符原来的值。 自 PHP 5.4.0 起生效。
JSON_PRETTY_PRINT (integer)
用空白字符格式化返回的数据。 自 PHP 5.4.0 起生效。
JSON_UNESCAPED_SLASHES (integer)
不要编码 /。 自 PHP 5.4.0 起生效。
JSON_UNESCAPED_UNICODE (integer)
以字面编码多字节 Unicode 字符(默认是编码成 \uXXXX)。 自 PHP 5.4.0 起生效。
版权声明:本文为博主原创文章,未经博主允许不得转载。
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
微信分享公众平台-破晓领域
微信号:fdipzone-idea
名称:破晓领域
访问:3119815次
积分:28327
积分:28327
排名:第84名
原创:175篇
转载:24篇
评论:151条
文章:17篇
阅读:275154
(4)(4)(4)(4)(4)(4)(4)(6)(4)(5)(4)(6)(5)(6)(6)(6)(4)(8)(7)(6)(6)(6)(6)(7)(12)(7)(4)(7)(5)(4)(5)(3)(2)(4)(1)(1)(3)(1)(1)(2)(5)(1)(5)linux环境下安装PHP的扩展--JSON扩展
1.下载源文件包:
http://pecl.php.net/package/json
wget http://pecl.php.net/get/json-1.2.1.tgz
tar xvjf php-json-ext-1.2.0.tar.bz2
3.进入目录
cd php-json-ext-1.2.0
4.初始化PHP环境
报错了:phpize commend not found
PHP JSON安装之前需要安装phpize
这个可以在yum中安装
yum -y install php-devel
如果还不能完成PHP JSON安装,说明你的编译工具有问题,安装一下就可以了
yum -y install autoconf
yum -y install automake
yum -y install libtool
运行phpize
5../configure
7.makeinstall
8.查看PHP JSON安装有没有成功
find / -name '*json.so'
./usr/lib/php/modules/json.so
说明已经有了
9.修改php.ini
我的是在php.ini 中include一个文件夹 /etc/php.d
在这个文件中添一个json.ini
vim json.ini
extension=json.so
10.重启服务
11.phpinfo()中您将看到
json support enabled
json version
以上就是PHP JSON安装的全部步骤。
下载文件感谢您下载此文件!
请点击【立即下载】下载此文件立即下载PHP语言, PHP扩展, Zend引擎相关的研究,技术,新闻分享 – 左手代码 右手诗
我们知道, 用PHP的json_encode来处理中文的时候, 中文都会被编码, 变成不可读的, 类似”\u***”的格式, 还会在一定程度上增加传输的数据量.
echo json_encode(&中文&);
//&\u4e2d\u6587&
这就让我们这些在天朝做开发的同学, 很是头疼, 有的时候还不得不自己写json_encode.
而在PHP5.4, 这个问题终于得以解决,
Json新增了一个选项: JSON_UNESCAPED_UNICODE,
故名思议, 就是说, Json不要编码Unicode.
看下面的例子:
echo json_encode(&中文&, JSON_UNESCAPED_UNICODE);
怎么样, 是不是让大家很开心的改动?
呵呵, 当然, Json在5.4还加入了: JSON_BIGINT_AS_STRING, JSON_PRETTY_PRINT, JSON_UNESCAPED_SLASHES等选项, 如果有兴趣, 大家可以参看:
不过, 还是要提醒下: PHP 5.4还处于开发阶段, 在最终release之前, 任何新特性都可能被调整或者更改. 如果大家有任何建议, 也欢迎反馈, 帮助我们使得PHP变得更好.
更多更新信息, 请关注:
Random Posts:
Leave a Reply
开发组成员, 兼职顾问, PHP7核心开发者, , , 等项目作者.如何让 PHP json_encode 函数不转义中文? - 为程序员服务
如何让 PHP json_encode 函数不转义中文?
如果你调用 PHP 自带的 json_encode() 函数, 碰到中文时, 中文会被转义掉. 例如:
echo json_encode(array('你好'));
// 输出: ["\u4f60\u597d"]
这非常恼人, 像是一堆乱码, JSON 标准从来没有说要把非 ASCII 字符转义, 标准说的是"Any UNICODE character".
如何禁用掉这种转义呢? 答案是, PHP 自带的 json_encode() 不能禁用这个特性(在 5.4.0 版本之前, 之后的版本你可以加 JSON_UNESCAPED_UNICODE 选项), 你只能换一个新的 JSON 库. 为了简单, 我简单写了几十行代码, 实现一个 json_encode().
class Util
static function json_encode($input){
// 从 PHP 5.4.0 起, 增加了这个选项.
if(defined('JSON_UNESCAPED_UNICODE')){
return json_encode($input, JSON_UNESCAPED_UNICODE);
if(is_string($input)){
$text = str_replace('\\', '\\\\', $text);
$text = str_replace(
array("\r", "\n", "\t", "\""),
array('\r', '\n', '\t', '\\"'),
return '"' . $text . '"';
}else if(is_array($input) || is_object($input)){
$arr = array();
$is_obj = is_object($input) || (array_keys($input) !== range(0, count($input) - 1));
foreach($input as $k=>$v){
if($is_obj){
$arr[] = self::json_encode($k) . ':' . self::json_encode($v);
$arr[] = self::json_encode($v);
if($is_obj){
return '{' . join(',', $arr) . '}';
return '[' . join(',', $arr) . ']';
return $input . '';
考虑不到的地方, 例如判断关联数组(is_obj)的地方, 遇到问题再说. 你要是不喜欢类, 那就自己转成纯函数, 换个名字吧.
Related posts:
高性能分布式 Web 和网络应用开发, 架构设计, 移动应用开发
原文地址:, 感谢原作者分享。
您可能感兴趣的代码您所在的位置: &
探讨如何实现PHP使用JSON
探讨如何实现PHP使用JSON
thunderbow
javaeye博客
PHP使用JSON需要采用支持JSON的PHP5.2。本文向大家介绍的两个实现的函数:json_encode和json_decode,一个编码和一个解码。
大家也许都对已经不再陌生,那么对于JSON的了解又如何呢?今天我们就向大家简要的介绍PHP使用JSON的具体编码,希望本文内容对又需要的朋友有所帮助。
互联网的今天,AJAX已经不是什么陌生的词汇了。说起AJAX,可能会立即想起因RSS而兴起的XML。XML的解析,恐怕已经不是什么难题了,特别是PHP5,大量的XML解析器的涌现,如最轻量级的SimpleXML。不过对于AJAX来说,XML的解析更倾向于前台Javascript的支持度。我想所有解析过XML的人,都会因树和节点而头大。不可否认,XML是很不错的数据存储方式,但是其灵活恰恰造成了其解析的困难。当然,这里所指的困难,是相对于本文的主角--JSON而言。
JSON为何物?我就不重复概念了。通俗的说,它是一种数据的存储格式,就像PHP序列化后的字符串一样。它是一种数据描述。比如我们将一个数组序列化后存放,就可以很容易的反序列化后应用。JSON也是如此,只不过他搭建的是客户端Javascript和服务端PHP的交互桥梁。我们用PHP生成JSON后的字符串,然后把这个字符串传给前台Javascript,Javascirpt就可以很容易的将其反JSON然后应用。说通俗点,它真的很像数组。
言归正传,如何进行PHP使用JSON。PHP5.2开始内置了JSON的支持。当然,如果低于这个版本的话,那么市面上有很多PHP版本的实现,随便下一个用就OK啦。现在主要是说说PHP内置支持的JSON。很简单,两个函数:json_encode和json_decode(跟序列化很像啦)。一个编码,一个解码。先看看编码的使用:&$arr&=&array( &&&&&&'name'&=&'陈毅鑫', &&&&&&'nick'&=&'深空', &&&&&&'contact'&=&array( &&&&&&&&&&'email'&=&'shenkong&at&qq&dot&com', &&&&&&&&&&'website'&=&'', &&&&&&) &); &$json_string&=&json_encode($arr); &echo&$json_ &&
很简单的将一个数组JSON了。需要指出的是,在非UTF-8编码下,中文字符将不可被encode,结果会出来空值,所以,如果你使用gb2312编写PHP代码,那么就需要将包含中文的内容使用iconv或者mb转为UTF-8再进行json_encode,上面输出结果如下:
{"name":"\u\u946b","nick":"\u6df1\u7a7a","contact":{"email":"shenkong at qq dot com","website":"
我都说了和序列化很像,你还不信。编码后就要解码,PHP提供了相应的函数json_decode,json_decode执行后,将会得到一个对象,操作如下:&?php
$arr = array(
&&&& 'name' =& '陈毅鑫',
&&&& 'nick' =& '深空',
&&&& 'contact' =& array(
&&&&&&&& 'email' =& 'shenkong at qq dot com',
&&&&&&&& 'website' =& 'http://www.chenyixin.com',
$json_string = json_encode($arr);
$obj = json_decode($json_string);
print_r($obj);
访问对象内的属性会吧?$obj-&name,这样子的,当然,也可以把它转位数组,方便调用啦:$json_string = json_encode($arr);
$obj = json_decode($json_string);
$arr = (array) $
print_r($arr);
上面中,将json_encode的字符串用括号包起来,在执行eval,它就变成一个Javascript数组了(专业化术语应该不叫数组,不过由于PHP的习惯问题,我就一直叫数组好了,方便理解)。这样,可以很方便的对arr进行遍历或者任意做你想做的事情了。写到这里,好像都没提到AJAX哦?是哦,联想一下,如果服务端返回的responseText用JSON过的字符串代替XML的话,前台Javascript处理起来是不是很方便呢?狗皮膏药就是这样用的。
其实写到这里,除了数据的存储格式不太一样外,JSON和XML也没什么太大区别哦,不过下面我说的一点。虽然和XML没多大关系,不过,可以说明JSON更大范围的应用,那就是,跨域的数据调用。由于安全性问题,AJAX不支持跨域调用,这样要调用不同域名下的数据,很麻烦哦,虽然有解决方案(stone在他的讲座上提到过了代理啊什么的虽然听不懂但是知道能解决)。我写两个文件,足以展示跨域调用了。
主调文件index.html&script type="text/javascript"&
function getProfile(str) {
&&&& var arr = eval('(' + str + ')');
&&&& document.getElementById('nick').innerHTML = arr.
&body&&div id="nick"&&/div&&/body&
&script type="text/javascript" src="http://www.phpfans.org/demo/profile.php"&&/script&
被调文件profile.php&?php
$arr = array(
&&&& 'name' =& '陈毅鑫',
&&&& 'nick' =& '深空',
&&&& 'contact' =& array(
&&&&&&&& 'email' =& 'shenkong at qq dot com',
&&&&&&&& 'website' =& 'http://www.chenyixin.com',
$json_string = json_encode($arr);
echo "getProfile('($json_string)')";
很显然,当index.html调用profile.php时,JSON字符串生成,并作为参数传入getProfile,然后将昵称插入到div中,这样一次跨域数据交互就完成了,是不是PHP使用JSON特别简单。
文章来源:【责任编辑: TEL:(010)】
关于的更多文章
PHP,一个嵌套的缩写名称,是英文超级文本预处理语言(PHP:Hyper
本次的专刊为大家提供了Oracle最新推出的Java SE 8详细的开发教程,从解读到探究Java 8最新
国庆假期前的612,是不是有点折腾?网上的中秋国庆放
刚刚开始接触java数组的人都会听到一句类似的话:java
9月的工作日被法定假日拆的零零散散,不知道各位的工
本书使用通俗易懂的语言,通过大量的实例,从实际应用的角度出发,全面系统地介绍了网络服务操作系统平台、电子邮件系统、Web站
51CTO旗下网站

我要回帖

更多关于 php如何解析json 的文章

 

随机推荐