JSON基础

1.什么是 JSON

JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)

JSON 是轻量级的文本数据交换格式

JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平

台。JSON 解析器和 JSON 库支持许多不同的编程语言。

目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。

JSON-- 独立于语言的轻量级的文本数据交换格式。

在没有JSON之前我们使用XML充当数据交换格式。

JSON与 XML 相同之处

  • JSON 是纯文本
  • JSON 具有"自我描述性"(人类可读)
  • JSON 具有层级结构(值中存在值)
  • JSON 可通过 JavaScript 进行解析
  • JSON 数据可使用 AJAX 进行传输

JSON与 XML 不同之处

  • 没有结束标签
  • 更短
  • 读写的速度更快
  • 能够使用内建的 JavaScript eval() 方法进行解析
  • 使用数组
  • 不使用保留字

为什么使用 JSON

对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

使用 XML

读取 XML 文档

使用 XML DOM 来循环遍历文档

读取值并存储在变量中

使用 JSON

读取 JSON 字符串

用 eval() 处理 JSON 字符串

3.JSON数据的组成

1.json对象

“{}”--json对象

“{}”包含---名称/值对【键值对】/ json数组 / json对象

JSON 名称/值对【键值对】书写格式是:

key : value-----”name”:zhangsan

JSON 名称/值对【键值对】中的键,使用双引号包围

JSON 名称/值对【键值对】中的值

1.数字(整数或浮点数) "age":30

2.字符串(在双引号中)”name”:”zhangsan”

3.逻辑值(true 或 false)"flag":true

4.数组(在中括号中)”array”:[]

5.对象(在大括号中)”obj”:{}

6.null     "runoob":null

例如:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>
            //JavaScript对象
            /*var student={stuid:1001,stuname:"zhangsan"};
            student.stuage=23;
            alert(student.stuage);*/
            //json对象
            /*var person={"perid":1002,"pername":"lisi"};
            //alert(person.perid);
            person.perage=20;
            alert(person.perage);*/
            var jsonstu={
                "stuid":1001,
                "stuname":"wangyi",
                "stusex":true,
                "jobarr":["上海","西安"],
                "jsonobj":{"obj1":"wangyi","obj2":"tengxvn"}
            };
            alert(jsonstu);
        </script>
    </head>
    <body>
        
    </body>
</html>

 2.json数组

“[]”--json数组

“[]”包含---具体数据值/json对象、

json对象中可以包含数组/其他对象

json数组可以包含json对象

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>

            var studentjson={
                "stuid":1001,
                "stuname":"wangyi",
                "stusex":true,
                "jobarr":[{"boj1":"xian","bojarr1":4},{"boja2":"beijing","objarr2":4}],
                "jsonobj":{"obj1":"wangyi","obj2":"tengxvn"}
            };
            alert(studentjson);
        </script>
    </head>
    <body>
        
    </body>
</html>

比较复杂的json数据都是对象中有数组,数组中有对象的嵌套结构。

https://free-api.heweather.com/v5/weather?city=%E8%A5%BF%E5%AE%89&key=d7bd43af19c64994b62fc643e5d75272

{"HeWeather5":[{"aqi":{"city":{"aqi":"99","qlty":"良","pm25":"43","pm10":"148","no2":"36","so2":"10","co":"0.6","o3":"65"}},"basic":{"city":"西安","cnty":"中国","id":"CN101110101","lat":"34.26316071","lon":"108.94802094","update":{"loc":"2021-03-25 09:47","utc":"2021-03-25 01:47"}},"daily_forecast":[{"astro":{"mr":"15:05","ms":"04:39","sr":"06:39","ss":"19:00"},"cloud":"25","cond":{"code_d":"104","code_n":"305","txt_d":"阴","txt_n":"小雨"},"date":"2021-03-25","hum":"73","pcpn":"0.0","pop":"25","pres":"963","tmp":{"max":"19","min":"11"},"uv":"3","vis":"16","wind":{"deg":"45","dir":"东北风","sc":"3-4","spd":"15"}},{"astro":{"mr":"16:12","ms":"05:19","sr":"06:37","ss":"19:01"},"cloud":"58","cond":{"code_d":"305","code_n":"101","txt_d":"小雨","txt_n":"多云"},"date":"2021-03-26","hum":"71","pcpn":"1.4","pop":"58","pres":"960","tmp":{"max":"16","min":"7"},"uv":"2","vis":"24","wind":{"deg":"180","dir":"南风","sc":"1-2","spd":"7"}},{"astro":{"mr":"17:21","ms":"05:56","sr":"06:36","ss":"19:02"},"cloud":"0","cond":{"code_d":"100","code_n":"100","txt_d":"晴","txt_n":"晴"},"date":"2021-03-27","hum":"28","pcpn":"0.0","pop":"0","pres":"958","tmp":{"max":"22","min":"6"},"uv":"7","vis":"25","wind":{"deg":"0","dir":"北风","sc":"1-2","spd":"3"}}],"now":{"cond":{"code":"101","txt":"多云"},"dew":"4","fl":"13","hum":"56","pcpn":"0.0","pres":"968","tmp":"14","vis":"15","wind":{"deg":"125","dir":"东南风","sc":"1","spd":"4"}},"status":"ok","suggestion":{"air":{"brf":"良","txt":"气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。"},"comf":{"brf":"舒适","txt":"白天不太热也不太冷,风力不大,相信您在这样的天气条件下,应会感到比较清爽和舒适。"},"cw":{"brf":"较适宜","txt":"较适宜洗车,未来一天无雨,风力较小,擦洗一新的汽车至少能保持一天。"},"drsg":{"brf":"较舒适","txt":"建议着薄外套、开衫牛仔衫裤等服装。年老体弱者应适当添加衣物,宜着夹克衫、薄毛衣等。"},"flu":{"brf":"少发","txt":"各项气象条件适宜,无明显降温过程,发生感冒机率较低。"},"sport":{"brf":"较不宜","txt":"有扬沙或浮尘,建议适当停止户外运动,选择在室内进行运动,以避免吸入更多沙尘,有损健康。"},"trav":{"brf":"适宜","txt":"天气较好,风稍大,但温度适宜,总体来说还是好天气。这样的天气适宜旅游,您可以尽情享受大自然的风光。"},"uv":{"brf":"最弱","txt":"属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。"}}},{"aqi":{"city":{"aqi":"59","qlty":"良","pm25":"35","pm10":"68","no2":"41","so2":"23","co":"0.7","o3":"47"}},"basic":{"city":"西安","cnty":"中国","id":"CN101050311","lat":"44.5810318","lon":"129.6131134","update":{"loc":"2021-03-25 09:47","utc":"2021-03-25 01:47"}},"daily_forecast":[{"astro":{"mr":"13:11","ms":"03:44","sr":"05:13","ss":"17:41"},"cloud":"55","cond":{"code_d":"305","code_n":"404","txt_d":"小雨","txt_n":"雨夹雪"},"date":"2021-03-25","hum":"87","pcpn":"1.0","pop":"55","pres":"975","tmp":{"max":"10","min":"-3"},"uv":"2","vis":"24","wind":{"deg":"315","dir":"西北风","sc":"1-2","spd":"3"}},{"astro":{"mr":"14:25","ms":"04:17","sr":"05:11","ss":"17:43"},"cloud":"1","cond":{"code_d":"104","code_n":"305","txt_d":"阴","txt_n":"小雨"},"date":"2021-03-26","hum":"75","pcpn":"0.0","pop":"1","pres":"968","tmp":{"max":"12","min":"1"},"uv":"3","vis":"24","wind":{"deg":"225","dir":"西南风","sc":"1-2","spd":"3"}},{"astro":{"mr":"15:42","ms":"04:47","sr":"05:09","ss":"17:44"},"cloud":"25","cond":{"code_d":"101","code_n":"101","txt_d":"多云","txt_n":"多云"},"date":"2021-03-27","hum":"86","pcpn":"0.0","pop":"25","pres":"960","tmp":{"max":"18","min":"2"},"uv":"5","vis":"25","wind":{"deg":"225","dir":"西南风","sc":"1-2","spd":"3"}}],"now":{"cond":{"code":"104","txt":"阴"},"dew":"-6","fl":"0","hum":"66","pcpn":"0.0","pres":"980","tmp":"3","vis":"16","wind":{"deg":"340","dir":"西北风","sc":"2","spd":"9"}},"status":"ok","suggestion":{"air":{"brf":"良","txt":"气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。"},"comf":{"brf":"较舒适","txt":"白天会有少量降雨,这种天气条件下,人们会感到有些凉意,但大部分人完全可以接受。"},"cw":{"brf":"不宜","txt":"不宜洗车,未来24小时内有雨,如果在此期间洗车,雨水和路上的泥水可能会再次弄脏您的爱车。"},"drsg":{"brf":"较冷","txt":"建议着厚外套加毛衣等服装。年老体弱者宜着大衣、呢外套加羊毛衫。"},"flu":{"brf":"易发","txt":"昼夜温差大,且空气湿度较大,易发生感冒,请注意适当增减衣服,加强自我防护避免感冒。"},"sport":{"brf":"较不宜","txt":"有降水,推荐您在室内进行健身休闲运动;若坚持户外运动,须注意保暖并携带雨具。"},"trav":{"brf":"适宜","txt":"温度适宜,又有较弱降水和微风作伴,会给您的旅行带来意想不到的景象,适宜旅游,可不要错过机会呦!"},"uv":{"brf":"弱","txt":"紫外线强度较弱,建议出门前涂擦SPF在12-15之间、PA+的防晒护肤品。"}}},{"aqi":{"city":{"aqi":"42","qlty":"优","pm25":"26","pm10":"42","no2":"36","so2":"12","co":"1.1","o3":"55"}},"basic":{"city":"西安","cnty":"中国","id":"CN101060705","lat":"42.92041397","lon":"125.15142059","update":{"loc":"2021-03-25 09:47","utc":"2021-03-25 01:47"}},"daily_forecast":[{"astro":{"mr":"13:35","ms":"03:56","sr":"05:31","ss":"17:58"},"cloud":"2","cond":{"code_d":"100","code_n":"101","txt_d":"晴","txt_n":"多云"},"date":"2021-03-25","hum":"64","pcpn":"0.0","pop":"2","pres":"980","tmp":{"max":"17","min":"-2"},"uv":"5","vis":"25","wind":{"deg":"270","dir":"西风","sc":"3-4","spd":"20"}},{"astro":{"mr":"14:48","ms":"04:31","sr":"05:29","ss":"18:00"},"cloud":"25","cond":{"code_d":"104","code_n":"305","txt_d":"阴","txt_n":"小雨"},"date":"2021-03-26","hum":"70","pcpn":"0.0","pop":"25","pres":"973","tmp":{"max":"16","min":"4"},"uv":"2","vis":"25","wind":{"deg":"225","dir":"西南风","sc":"1-2","spd":"7"}},{"astro":{"mr":"16:03","ms":"05:02","sr":"05:28","ss":"18:01"},"cloud":"1","cond":{"code_d":"101","code_n":"101","txt_d":"多云","txt_n":"多云"},"date":"2021-03-27","hum":"78","pcpn":"0.0","pop":"1","pres":"963","tmp":{"max":"17","min":"5"},"uv":"5","vis":"25","wind":{"deg":"225","dir":"西南风","sc":"1-2","spd":"11"}}],"now":{"cond":{"code":"100","txt":"晴"},"dew":"-3","fl":"6","hum":"39","pcpn":"0.0","pres":"982","tmp":"11","vis":"16","wind":{"deg":"226","dir":"西南风","sc":"4","spd":"21"}},"status":"ok","suggestion":{"air":{"brf":"良","txt":"气象条件有利于空气污染物稀释、扩散和清除,可在室外正常活动。"},"comf":{"brf":"舒适","txt":"白天不太热也不太冷,风力不大,相信您在这样的天气条件下,应会感到比较清爽和舒适。"},"cw":{"brf":"较不宜","txt":"较不宜洗车,未来一天无雨,风力较大,如果执意擦洗汽车,要做好蒙上污垢的心理准备。"},"drsg":{"brf":"冷","txt":"天气冷,建议着棉服、羽绒服、皮夹克加羊毛衫等冬季服装。年老体弱者宜着厚棉衣、冬大衣或厚羽绒服。"},"flu":{"brf":"极易发","txt":"天气寒冷,昼夜温差极大且风力较强,易发生感冒,请注意适当增减衣服,加强自我防护避免感冒。"},"sport":{"brf":"较适宜","txt":"天气较好,但因风力稍强,户外可选择对风力要求不高的运动,推荐您进行室内运动。"},"trav":{"brf":"适宜","txt":"天气较好,风稍大,但温度适宜,是个好天气哦。适宜旅游,您可以尽情地享受大自然的无限风光。"},"uv":{"brf":"最弱","txt":"属弱紫外线辐射天气,无需特别防护。若长期在户外,建议涂擦SPF在8-12之间的防晒护肤品。"}}}]}

面对上面的复杂json数据,我们往往不能看清他的结构,这时我们可以借助工具来查看json的结构

JSON在线解析及格式化验证 - JSON.cn

4.JSON数据的转换

我们得到的json数据有可能是json对象,也有可能是json字符串。因此我们就需要将json对象与

json字符串进行转换

1.判断得到的是json对象还是json字符串。

alert(student); ---- [object Object]  --  json对象

2.Json对象转换成Json字符串

可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>
            //1.Json对象转换成Json字符串
            //可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串
            var jsonstu={
                  "stuid":1002,
                  "stuname":"zhaoliu",
                  "stusex":true,
                  "stuarr":[{"arr1":1,"arr2":"西安"},
                            {"arr1":2,"arr2":"深圳"}]
            };
            //alert(jsonstu)
            //var jsonstr=JSON.stringify(jsonstu);
            alert(jsonstr);
        </script>
    </head>
    <body>
        
    </body>
</html>

3.json字符串转换成Json对象

1.使用 JSON.parse() 方法将数据转换为 JavaScript 对象。

2.eval("("+str+")");

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>

             //2.Json字符串转换成Json对象
             //1.使用 JSON.parse() 方法将数据转换为 JavaScript 对象
             /*var student2="{\"stuid\":1001,"+
                        "\"stuname\":\"zhangsan\","+
                        "\"stusex\":true,"+
                        "\"stuaddress\":[{\"addresstype\":\"家庭\",\"addressinfo\":\"西安\"},"+
                        "{\"addresstype\":\"工作\",\"addressinfo\":\"北京\"}]}";
            var jsonobj1=JSON.parse(student2);
            alert(jsonobj1);*/
            //2.eval("("+str+")");
            var student3="{\"stuid\":1001,"+
                        "\"stuname\":\"zhangsan\","+
                        "\"stusex\":true,"+
                        "\"stuaddress\":[{\"addresstype\":\"家庭\",\"addressinfo\":\"西安\"},"+
                        "{\"addresstype\":\"工作\",\"addressinfo\":\"北京\"}]}";
                    var jsonobj2=eval("("+student3+")");
                    alert(jsonobj2);
        </script>
    </head>
    <body>
        
    </body>
</html>

5.JSON数据的解析

1.将json数据变成json对象

2.json对象名称.属性名称

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <script>
        /*var student1="{\"stuid\":1001,"+
                        "\"stuname\":\"zhangsan\","+
                        "\"stusex\":true,"+
                        "\"stuaddress\":[{\"addresstype\":\"家庭\",\"addressinfo\":\"西安\"},"+
                        "{\"addresstype\":\"工作\",\"addressinfo\":\"北京\"}]}";*/
                        var jsonstu={
                  "stuid":1002,
                  "stuname":"zhaoliu",
                  "stusex":true,
                  "stuarr":[{"arr1":1,"arr2":"西安"},
                            {"arr1":2,"arr2":"深圳"}]
            };
            document.write("<h5>学生编号:"+jsonstu.stuid+"</h5>");
            document.write("<h5>学生姓名:"+jsonstu.stuname+"</h5>");
            if(jsonstu.syusex){
                document.write("<h5>学生性别:男</h5>");
            }else{
                document.write("<h5>学生性别:女</h5>");
           }
           var addressArray=jsonstu.stuarr;
           for(var i=0;i<addressArray.length;i++){
					document.write("<h5>"+addressArray[i].arr1+":"+addressArray[i].arr2+"</h5>");
				}
        </script>
    </head>
    <body>
        
    </body>
</html>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值