JSON的使用

1.什么是json

  json:JavaScript object notation(JavaScript对象符号),其是一种数据交换格式(xml也是一种数据交换格式)。
  之前用户网站需要获得天气信息,通常会把天气预报官网首页的全部信息都给请求回来,但实际上只需要其中的很少的天气信息,这样对带宽、天气官网的服务器、用户等待时间的消耗比较严重。
  为了处理上述问题,天气预报网站服务器把天气信息做成一个数据接口提供出来。
  为了各种语言(java/php/.net/javascript)的网站用户方便使用该数据接口,其接口的数据格式使用的是通用的json/xml。
  json的生成和处理要比xml更加方便,因此在许多领域json正逐步取代xml。
  
  一个具体的天气预报接口:
  这里写图片描述  
  通过接口获得天气信息:
这里写图片描述

2 json的使用

2.1 JavaScript中json的使用

  json在JavaScript中就是字面量对象

var obj = [名称:值, 名称:值, 名称:function(){}]

2.2 通过php生成json信息  

json_encode(数组/对象) —— 生成json信息   

json_encode(关联数组) —— json对象
json_encode(索引数组) —— js数组
json_encode(索引关联数组) —— json对象
json_encode(对象) —— json对象

php中生成json信息:

<?php
//在php中生成json信息
//json_encode(数组/对象)

//索引数组
$color = array('red', 'blue', 'green');
echo json_encode($color);//字符串 ["red", "blue", "green"]

//关联数组
$city = array('hebei' => 'shijianzhuang' ,'hubei' => 'wuhan', 'guangdong' => 'guangzhou');
echo json_encode($city);//{"hebei":"shijianzhuang","hubei":"wuhan","guangdong":"guangzhou"}

//索引关联数组
$quyu= array('dongbei' => 'jiling', 'huabei' => 'beijing', 'shanghai', 'huazhong' => 'hubei', 'guangdong');
echo json_encode($quyu);//{"dongbei":"jiling","huabei":"beijing","0":"shanghai","huazhong":"hubei","1":"guangdong"}

//对象生成json信息
class Person{
    public $name = "yeoman";
    public $age = 23;
    public function run(){
        echo "is running";
    }
}
$per = new Person();
//生成json信息只考虑属性
echo json_encode($per);//{"name":"yeoman","age":23}

2.3 php处理json信息

json_decode(json信息, boolean);   //反编码json信息

  对json字符串信息进行反编码,变为当前语言可以识别的信息。

json_decode(json字符串, true); //返回一个数组
json_decode(json字符串, [false]);  //返回一个对象

  对json字符串进行反编码操作:

<?php
//解析、反编码json信息
$city = array('hebei' => 'shijianzhuang' ,'hubei' => 'wuhan');
$encode_city = json_encode($city);

//反编码
$decode_city = json_decode($encode_city,true);//第二个参数默认为false,为false解码成对象,true解码成数组
var_dump($decode_city);
/*结果
array (size=2)
  'hebei' => string 'shijianzhuang' (length=13)
  'hubei' => string 'wuhan' (length=5)
*/

  自定义字符串反编码操作,对单双引号有要求(php版本问题):

<?php
//给自定义的“json字符串”反编码操作
//反编码的json字符串对定义的“单双引号”有要求
//$str = "{name:'yeoman', age:24, xinbie:'男'}";//null
$str = '{"name":"yeoman", "age":"24", "xinbie":"male"}';//外面是单引号,里面是双引号,每个单位都要用引号
$de_str = json_decode($str, true);
var_dump($de_str);
/*结果
array (size=3)
  'name' => string 'yeoman' (length=6)
  'age' => string '24' (length=2)
  'xinbie' => string 'male' (length=4)
*/

2.4 JavaScript接收处理json信息

  ajax获得接口的信息为字符串,JavaScript中通过eval()函数把接收的json字符串变成对象。
  把json字符串转为json对象:

//在JavaScript中,把json字符串“string”变为json对象“object”
            var obj = "{name:'kitty', age:2}";
            //eval(字符串参数)  字符串参数变为表达式运行
            eval("var cat=" + obj); //做连接操作,变为一个对象整体,eval("var cat={name:'kitty',age:5}")
            console.log(cat);

  有关js中将json字符串转换为json对象的方法详细介绍,请参考 js中将json字符串转换为json对象的方法
  
  JavaScript+Ajax处理接口信息:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script type="text/javascript">
            function get_weather(){
                //ajax去请求接收json信息
                //js做后期处理
                var xhr = new XMLHttpRequest();
                xhr.onreadystatechange = function(){
                    if(xhr.readyState == 4){
                        //alert(typeof xhr.responseText);//string

                        //把接收的字符串json变为对象object
                        eval("var jn_info=" + xhr.responseText);
                        console.log(jn_info);// Object { city="北京",  temp="18",  WD="东南风"}
                        console.log(jn_info.city);//北京
                        console.log(jn_info.WD);//东南风
                    }
                }
                xhr.open('get', "./003.php");
                xhr.send(null);
            }
        </script>
    </head>
    <body>
        <h2>接收/处理json信息</h2>
        <input type="button" value="获取天气" onclick="get_weather()">
    </body>
</html>

  json接口信息:

<?php
header("content-type:text/html,charset=utf-8");
//制作一个json信息
echo '{"city":"北京","temp":"18","WD":"东南风"}';
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值