PHP API接口必备之输出json格式数据
在日常的开发工作中免不了要写接口,json格式文本的输出是制作接口必须掌握的,现在通行的接口基本是采用json格式的数据,简单的php json文件输出
json接口如何生成?或者是如何将普通数据转化为json数据?
注意:如果不加header直接输出json_encode的值的话,返回的是字符串不是对象,js那边就需要先eval('('+data+')')转化为对象,再进行取值
<?php header('content-type:application/json;charset=utf8'); $arr=array( array( 'name'=>'zhangsan', 'sex' =>'man', 'age' =>18, ), array( 'name'=>'lisi', 'sex' =>'women', 'age' =>20, ), array( 'name'=>'wangwu', 'sex' =>'man', 'age' =>19, ), ); $json=json_encode($arr); echo $json; ?>
这样,我们就可以得到一个输出形式为json格式的页面
使用 php 来做一个简单的接口,客户端传入数据,该接口返回 JSON 格式数据
<?php /* * (PHP简单封装JSON数据接口) * @param integer $code 状态码 * @param string $message 提示信息 * @param array $data 数据 * return json(string) */ header('content-type:application/json;charset=utf8'); class Response { public static function json($code, $message = '', $data = []){ # 判断参数有效性及错误处理 // code... # 结果(最终数组) $result = [ "code" => $code, "message" => $message, "data" => $data ]; # 转换为json并打印测试 echo json_encode($result); exit; } } # 创建数组 $arr = [ "id" => "1", "name" => "wang" ]; # 调用json接口(假设状态码200代表成功) Response::json(null, "数据返回成功", $arr); ?>
这样,我们就可以得到一个输出形式为json格式的页面
<?php header('Content-Type:application/json;charset=utf8'); $arr = [ "download_url" => "http://xxx.xxx.xxx.xxx/update/EasyClick/release.iec", "version" => "1.1.0", "dialog" => true, "msg" => "更新公告", "force" => false ]; echo json_encode($arr); ?>
PHP json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE 。
PHP json_decode() 函数用于对 JSON 格式的字符串进行解码,并转换为 PHP 变量。
<?php header('content-type:application/json;charset=utf8'); $arr = array('a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5); $en_ret = json_encode($arr); echo $en_ret; echo "<br>"; $de_ret = json_decode($en_ret); echo $de_ret->e; echo "<br>"; ?>
JSON 值可以是:
前端一般和后端传递数据选择JSON是因为
(1)JSON是纯文本格式,是独立于语言和平台的。
(2)生成和解析相对于XML而言要简单。
(3)读写的速度更快。
php中json_encode编码成功的话返回一个JSON格式的字符串,失败的话返回一个false(var_dump一下可以看看是不是string类型)
后端将这个json数据(string)返回给前端,前端再对这个json数据也就是string进行下一步处理。
而json_decode($jsondata,bool),一般是将前台传来的json数据(string)解码为对象类型(bool为false时,默认false),当bool为true时,则将json(string)转化为数组类型,再进下一步处理。
对象类型的操作和数组类型是不一样的
<?php header('content-type:application/json;charset=utf8'); $data = array('a'=>'好','b'=>'hi','c'=>'good','d'=>'nice'); $jsondata = json_encode($data,JSON_UNESCAPED_UNICODE);//加上JSON_UNESCAPED_UNICODE就不会自动对中文编码 echo $jsondata; //结果{"a":"好","b":"hi","c":"good","d":"nice"},一条JSON格式的字符串 $array = json_decode($jsondata,TRUE); var_dump($array['b']);//调用数组元素 $obj = json_decode($jsondata); var_dump($obj->c);//调用对象元素 ?>
注意: json_encode 和 json_decode只支持utf-8编码的中文字符,GBK的中文字符要用json就得转换一下
PHP5.4版本,已经给Json新增了一个选项: JSON_UNESCAPED_UNICODE。加上这个选项后,就不会自动把中文编码了。
PHP数组与JSON互相转换,数组转json:json_encode();json转数组:json_decode();
使用json_encode转json时会发现中文字符会出现乱码
只需要在json_encode();函数中加入JSON_UNESCAPED_UNICODE即可。
1、PHP数组转JSON
<?php //header('content-type:application/json;charset=utf8'); $array = Array('title' => '标题', 'url' => 'meitu.jpg'); $json = json_encode($array); echo $json; //输出结果: {"title":"\u6807\u9898","url":"meitu.jpg"} ?>
2、PHP数组转JSON中文字符不乱码
<?php //header('content-type:application/json;charset=utf8'); $array = Array('title' => '标题', 'url' => 'meitu.jpg'); $json = json_encode($array, JSON_UNESCAPED_UNICODE); echo $json; //输出结果: {"title":"标题","url":"meitu.jpg"} ?>
3、PHP JSON转数组
<?php $json = '{"title":"标题","url":"meitu.jpg"}'; $array_json=json_decode($json,true); print_r($array_json); ?>
4、PHP JSON转对象
<?php $json = '{"title":"标题","url":"meitu.jpg"}'; $Object_json=json_decode($json,false); print_r($Object_json); ?>
以上就是php实现将普通数据转化为json数据的详细内容,更多关于php数据转json的资料请关注插件窝其它相关文章!