Json的使用

json:JavaScript 对象表示法(JavaScript Object Notation)。 JSON 是存储和交换文本信息的语法。类似 XML。 JSON 比 XML 更小、更快,更易解析。
          json数据格式简单,易于读写,格式压缩过占用宽带少易于解析,客户端通过js可以快速的通过eval()读取数据,支持多种语言,简化服务端的代码的开发量  json是纯文本的,具有自我描述的功能,具有层级结构,可以通过js解析,可以使用ajax传送与 XML 不同之处没有结束标签更短读写的速度更快能够使用内建的 JavaScript eval() 方法进行解析使用数组不使用保留字
对于 AJAX 应用程序来说,JSON 比 XML 更快更易使用:

  •     使用 XML:读取 XML 文档使用 XML DOM 来循环遍历文档读取值并存储在变量中
  •     使用 JSON:读取 JSON 字符串用 eval() 处理 JSON 字符串

        Jsonp(JSON with Padding) 是 json 的一种"使用模式",可以让网页从别的域名(网站)那获取资料,即跨域读取数据。 为什么我们从不同的域(网站)访问数据需要一个特殊的技术(JSONP )呢?这是因为同源策略。  同源策略,它是由Netscape提出的一个著名的安全策略,现在所有支持JavaScript 的浏览器都会使用这个策略。 Jsonp 的实现原理是利用 <script> 标签可以获取不同源资源的特点,来达到跨域访问某个资源的目的。
json的语法:数据在名称/值对中,数据由逗号分隔,花括号保存在对象中吧,方括号保存数组。
    例如:"firstname":"john"===>等价于js中的firstname="John";
        JSON的值可以为数字,字符串,逻辑值,数组,对象,null;
        json的对象:{“firstname”:"json","lastname":"done"}===>firstName = "John"   lastName = "Doe"

  •                     创建一个空的对象,var jsonobj={}
  •                     创建一个新对象: var jsonobj=new object();
  •                     创建一个bookname的属性值得对象:var JSONObj = { "bookname ":"VB BLACK BOOK", "price":500 };

        json的数组:{       "employees": [        
                                        { "firstName":"John" , "lastName":"Doe" },
                                        { "firstName":"Anna" , "lastName":"Smith" },
                                        { "firstName":"Peter" , "lastName":"Jones" }  ]}
        Json创建对象数组:var books = {
                                            "Pascal" : [ 
                                            { "Name"  : "Pascal Made Simple", "price" : 700 },
                                            { "Name"  : "Guide to Pascal", "price" : 400 }
                                            ],                       
                                            "Scala"  : [
                                            { "Name"  : "Scala for the Impatient", "price" : 1000 }, 
                                            { "Name"  : "Scala in Depth", "price" : 1300 }
                                            ]    
                                        } 

    json模式是一种基于json格式定义的json数据结构的规范:描述现有的数据格式,干净的人类机器可读文档,完整的结构验证,有利于自动化得测试,完整的结构的验证用于验证客户端的数据
        
                json模式的示例:
                              

 {
                                    "$schema": "http://json-schema.org/draft-04/schema#",//用于表示模式
                                    "title": "Product",//描述模式提供标题
                                    "description": "A product from Acme's catalog",//关于模式的描述
                                    "type": "object",//定义必须是一个json对象
                                    "properties": {//定义各种类型的键值对,以及json文件中的最大最小值
                                    "id": {
                                        "description": "The unique identifier for a product",
                                        "type": "integer"
                                    },
                                    "name": {
                                        "description": "Name of the product",
                                        "type": "string"
                                    },
                                    "price": {
                                        "type": "number",
                                        "minimum": 0,
                                        "exclusiveMinimum": true    //他为true时如果严格意义上小于“maximum”的值则实例有效
                                    }
                                    },
                                    "required": ["id", "name", "price"] //存放必要的属性列表
                                }


                json的两种数据结构:
                            1.有序的数组结构,
                                  

 {
                                        "button": {
                                        "1": {
                                            "type": "click",
                                            "name": "今日歌曲",
                                            "key": "V1001_TODAY_MUSIC"
                                        },
                                        "2": {
                                            "type": "click",
                                            "name": "歌手简介",
                                            "key": "V1001_TODAY_SINGER"
                                        },
                                        "3": {
                                            "name": "菜单",
                                            "sub_button": [
                                            {
                                                "type": "view",
                                                "name": "搜索",
                                                "url": "http://www.soso.com/"
                                            },
                                            {
                                                "type": "view",
                                                "name": "视频",
                                                "url": "http://v.qq.com/"
                                            },
                                            {
                                                "type": "click",
                                                "name": "赞一下我们",
                                                "key": "V1001_GOOD"
                                            }
                                            ]
                                        }
                                        }
                                    }


                            2.无序的对象结构:

json数据格式
                     json是一种轻量级的数据表示方法,json的格式采用key:value的形式记录数据,直观,比xml简洁,
                    JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在函数之间轻松地传递这个字符串,或者在异步应用程序中将字符串从 Web 客户机传递给服务器端程序。 这个字符串看起来有点儿古怪(稍后会看到几个示例),但是 JavaScript 很容易解释它,而且 JSON 可以表示比名称/值对更复杂的结构。例如,可以表示数组和复杂的对象,而不仅仅是键和值的简单列表
                    简单的json实例:{”firstName“:"Breet"}
                    值的数组:当使用json表示一组值得时候可以减少复杂性,
                      引号中的people就是一个变量。
                                var peoples= { "people": [
                                  { "firstName": "Brett", "lastName":"McLaughlin", "email": "brett@newInstance.com" },
                                  { "firstName": "Jason", "lastName":"Hunter", "email": "jason@servlets.com" },
                                  { "firstName": "Elliotte", "lastName":"Harold", "email": "elharo@macfaq.com" }
                                ]}

  •                         访问数据的方式:peoples.people[0].firstName;数组的索引是从零开始的,
  •                         使用json修改数据:peoples.people[2].lastName="uoade";
  •                         转换回字符串:String newJsonText=people.toJSONString();
  •                        如果使用json只需要调用一个简单的函数,就可以获得经过格式化的数据,可以直接使用。

  json数据是如何得到转换的呢:
                                1.使用eval()函数来解析:  eval()对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于eval()中执行一次。  这种方式也适合以普通javascipt方式获取json对象,形式:var dataObj=eval("("+data+")");由于json是花括号开始和结束的所以在使用的时候js很可能把他当做块处理,所以要加上(),强制的将他转换为一种表达式。对于一般的js生成json对象,只需要将$.each()方法替换为for语句即可,其他不变。对于服务器返回的JSON字符串,如果jquery异步请求将type(一般为这个配置属性)设为“json”,  或者利 用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可,
                   这里以$.getJSON方法为例说明数据处理方法:

                                      

  $.getJSON("http://www.phpzixue.cn/",{param:"gaoyusi"},function(data){
                                            //此处返回的data已经是json对象
                                            //以下其他操作同第一种情况
                                            $.each(data.root,function(idx,item){
                                            if(idx==0){
                                                //同countinue,返回false同break
                                                return true;
                                            }
                                            alert("name:"+item.name+",value:"+item.value);
                                            });
                                        });    

json中的转义字符:

  •                 1.双引号("),如果正确出现双引号应为\\\"
  •                 2.\n,如想想出现正确的换行需要json字符串中是\\n,其实是先对\n中的\转义,n变成了普通字符,在解析为js对象的时候n与之前的\(只有一个\了)被解释为换行。如下的两个与此类似。
  •                 3.\r,\\r
  •                 4.\t,\\t

                var obj = {  
                            a : "b",  
                            b : "\\",  
                            c : {  
                            b : "\\",   
                            a : {   
                                b : "\\"   
                            }  
                            }  
                        };  
                        var json_str = JSON.stringify(obj);  
                        console.log( JSON.stringify(obj) );  
                        console.dir(JSON.parse(json_str));  
                        console.dir(JSON.parse('{"a":"b","b":"\\\\","c":{"b":"\\\\","a":{"b":"\\\\"}}}'));  
                    JSON中想要输入"\"必须在这个"\"之前加一个"\"即"\\"-->”\“
                    js中:如果想在js对象中出现一个\,需要在json字符串中出现四个\ 。

  java中如何使用json呢:
                            基本类型都是相同的,唯一的不同。json中的数据对应的java数据array------>List;object---->Map
                            如果想将对象转换成JOSN,或将JSON转换成对象,你需要考虑使用Jackson或Gson。
                Json的转换插件

                                将java的对象或集合转成json形式字符串

                                json的转换插件是通过java的一些工具,直接将java对象或集合转换成json字符串。
                                常用的json转换工具有如下几种:
                                1)jsonlib
                                2)Gson:google
                                3)fastjson:阿里巴巴
                json转换:
                
                         json对象转字符串形式 :
                            function json2str(o) { 
                            var arr = []; 
                            var fmt = function(s) { 
                            if (typeof s == 'object' && s != null) return json2str(s); 
                            return /^(string|number)$/.test(typeof s) ? "'" + s + "'" : s; 
                            } 
                            for (var i in o) arr.push("'" + i + "':" + fmt(o[i])); 
                            return '{' + arr.join(',') + '}'; 
                            } 
                        string对象转化为json对象 代码如下:
                            function stringToJson(stringValue) { 
                                eval("var theJsonValue = "+stringValue); 
                                return theJsonValue; 
                            } 
 Jquery的Ajax技术(重点)
                                jquery是一个优秀的js框架,自然对js原生的ajax进行了封装,封装后的ajax的操作方法更简洁,功能更强大, 与ajax操作相关的jquery方法有如下几种,但开发中经常使用的有三种
                                
                                1)$.get(url, [data], [callback], [type])
                                2)$.post(url, [data], [callback], [type])

                                其中:
                                url:代表请求的服务器端地址
                                data:代表请求服务器端的数据(可以是key=value形式也可以是json格式)
                                callback:表示服务器端成功响应所触发的函数(只有正常成功返回才执行)
                                type:表示服务器端返回的数据类型(jquery会根据指定的类型自动类型转换)
                                常用的返回类型:text、json、html等

                                3)$.ajax( { option1:value1,option2:value2... } ); ---- 以后在掌握
                                常用的option有如下:
                                async:是否异步,默认是true代表异步
                                data:发送到服务器的参数,建议使用json格式
                                dataType:服务器端返回的数据类型,常用text和json
                                success:成功响应执行的函数,对应的类型是function类型
                                type:请求方式,POST/GET
                                url:请求服务器端地址

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kay三石 [Alay Kay]

你的鼓励是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值