JSON

可以再JS中,把数据组成一个json格式的字符串。作为参数传递给服务器。例如:proid={"id",1}
服务器在servlet中,可以使用String json = request.getParameter("proid");接收数据,再使用jackson把json转为对象使用。

 

《百度百科》

  JSON (JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。


0- 回顾:JavaScript中得到object类型对象方式有哪几种?    

  方式1: 由构造函数生成的对象都是object类型对象;    

  方式2: 由JSON数据描述格式生成对象都是object类型对象;


1- JSON

1)概述

  1. JSON是一种服务端 与 浏览器间的数据交换格式。
  2. 在JavaScript中。由JSON数据描述格式生成对象都是object类型对象。

   // JSON的标准命令格式  
   var obj  = { "属性名1":值, "属性名2" : 值};

  3. 开发者通常将由JSON生成的object类型对象称为JSON对象。
  4.专门存放JSON对象的数组被称为 JSON数组。

2)JSON的分类?

  任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型。

  1. JSON对象 —— JSONObject 。

    对象在 JS 中是使用花括号 {} 包裹起来的内容,数据结构为 {key1:value1, key2:value2, ...} 的键值对结构。

    在面向对象语言中,key 为对象的属性,value 为对应的值。键名可以使用整数或字符串来表示。值的类型可以是任意类型。
    
    对象是一个无序的“‘名称/值’对”集合。
    一个对象以左括号{ 开始,右括号 } 结束;
    每个“名称”后跟一个:冒号;
    “ ‘名称/值’ 对”之间使用,逗号分隔。
{ name:"河北", jiancheng:"冀","shenghui":"石家庄"}

    JSON源自JavaScript,JavaScript中只能使用string类型作为key。

  2. JSON数组 —— JSONArray。

    数组在 JS 中是方括号 [ ] 包裹起来的内容,数据结构为 ["java", "javascript", "vb", ...] 的索引结构。
    在 JS 中,数组是一种比较特殊的数据类型,它也可以像对象那样使用键值对,但还是索引使用得多。同样,值的类型可以是任意类型。
 [{ name:"河北", jiancheng:"冀","shenghui":"石家庄"} , { name:"山西", jiancheng:"晋","shenghui":"太原"} ]
    简单地说,JSON 可以将 JavaScript 对象中表示的一组数据转换为字符串,然后就可以在网络或者程序之间轻松地传递这个字符串,并在需要的时候将它还原为各编程语言所支持的数据格式,例如在 PHP 中,可以将 JSON 还原为数组或者一个基本对象。在用到AJAX时,如果需要用到数组传值,这时就需要用JSON将数组转化为字符串。

3)使用JSON的优势?

  1. json格式好理解

   2. json格式数据在多种语言中,比较容易处理。 使用java, javascript读写json格式的数据比较容易。

  3. json格式数据他占用的空间下,在网络中传输快, 用户的体验好。

4)常用处理JSON的工具库?

  1)gson   (google)

  2)fastjson(阿里)

  3)jackson

  4)json-lib


 

2- JSON的使用

1)如何理解 “JSON是服务端与浏览器之间的数据通信格式”这句话?

回顾javase基础知识:

String str = "";                 //这种方式是基本数据类型。 (值传递)

String str = new String();       //这种方式是高级引用数据类型(引用地址传递)

  JSON本身是在JavaScript中对于Object类型声明所提供的一种简化声明方式。
  在联合使用过程中,要想把服务端中的一个高级引用类型的数据内容传递到浏览器中的JavaScript变量时,此时需要将该高级引用数据内容转换成JSON格式的字符串再进行传递。(因为高级引用类型数据传递时,传递的是对象的内存地址。这对JavaScript而言无意义。)

  通常情况下,开发者会使用反射机制来实现该功能。—— 参考案例1

  但在实际开发中,通常引入已经编写好的JSON工具jar包 直接使用即可。—— 参考案例2

  其实JSON工具包中的代码也是利用反射机制实现了将任意的对象 封装成JSON格式的字符串 或JSON数组格式的字符串。将经过转换之后得到的JSON格式的字符串数据,放入request域中,然后请求跳转交由指定的jsp。
  jsp在运行的过程中,通过EL表达式取出域中的数据,交给JavaScript变量。由此完成了Java与JavaScript之间的通信。

  因此我们说,JSON是服务端与浏览器之间的数据通信格式。

 

ajax发起请求-------servlet(返回的一个json格式的字符串 { name:"河北", jiancheng:"冀","shenghui":"石家庄"})

2)Java中Obejct对象 转换成 JSON格式的字符串?

  普通对象 转成JSON格式          ——  使用JSONObject.fromObject(Object obj);   返回值是JSONObject类型
  集合对象 转成JSON数组格式:—— 使用JSONArray.fromObject(Object obj);     返回值是JSONArray类型


3-JSON 与 JS 对象的关系

  JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。

1)JSON 和 JS 对象之间进行互转?

要实现从JSON字符串转换为JS对象,使用 JSON.parse() 方法:
var obj = JSON.parse('{"a": "Hello", "b": "World"}');  //结果是 {a: 'Hello', b: 'World'}
  
要实现从JS对象转换为JSON字符串,使用 JSON.stringify() 方法:
var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'

2)将JSON类型的字符串 转为 JSON 对象?

  在js中的,可以把json格式的字符串,转为json对象。json中的key,就是json对象的属性名。

// 使用JavaScript变量接收来自服务端的数据 (此处获取到的是个JSON格式的字符串数据)
var
data = xmlHttpRequest.responseText;
// eval()是JavaScript中的函数。 eval是执行括号中的代码,把json格式字符串转成json对象。
var jsonobj = eval("("+data+")");
// 获取json对象的属性值,更新对应的dom对象

 


4.1-案例:利用反射机制,手动实现将Object对象转成JSON格式的字符串 或 JSON格式的数组形式。

背景:

  服务端处理之后得到的高级引用类型数据 若想传递到浏览器,则浏览器JavaScript对象只能接收到该对象的内存地址(无含义),不能读取到该对象的属性以及对应的属性值。

 

解决方案(思路):

  本质就是利用反射机制,将服务端的高级引用类型对象的属性 和 值取出,按照JSON格式拼接成该对象的JSON格式的字符串形式 或JSON数组格式的字符串

 

注意事项:

  类文件中的private修饰的私有属性,表示该属性只能在该类的内部使用。不能类文件的外面使用。

 

 

页面标签加载完毕之后,再执行

 


 4.2-案例:借助JSON工具包,将Java对象转换成符合JSON格式的字符串或JSON格式的数组。

  JSON工具包里面封装的是反射工具类,利用反射工具类将Java对象转换成符合JSON格式的字符串


5-JSON数据格式 与 XML数据格式的比较

  XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。
 
1)用XML表示中国部分省市数据如下:
<?xml version="1.0" encoding="utf-8"?>
<country>
    <name>中国</name>
    <province>
        <name>黑龙江</name>
        <cities>
            <city>哈尔滨</city>
            <city>大庆</city>
        </cities>
    </province>
    <province>
        <name>广东</name>
        <cities>
            <city>广州</city>
            <city>深圳</city>
            <city>珠海</city>
        </cities>
    </province>
    <province>
        <name>台湾</name>
        <cities>
            <city>台北</city>
            <city>高雄</city>
        </cities>
    </province>
    <province>
        <name>新疆</name>
        <cities>
            <city>乌鲁木齐</city>
        </cities>
    </province>
</country>

 

 
2)用JSON表示如下:
{
    "name": "中国",
    "province": [{
        "name": "黑龙江",
        "cities": {
            "city": ["哈尔滨", "大庆"]
        }
    }, {
        "name": "广东",
        "cities": {
            "city": ["广州", "深圳", "珠海"]
        }
    }, {
        "name": "台湾",
        "cities": {
            "city": ["台北", "高雄"]
        }
    }, {
        "name": "新疆",
        "cities": {
            "city": ["乌鲁木齐"]
        }
    }]
}

  可以看到,JSON 简单的语法格式和清晰的层次结构明显要比 XML 容易阅读,并且在数据交换方面,由于 JSON 所使用的字符要比 XML 少得多,可以大大得节约传输数据所占用的带宽。

 

 

posted @ 2021-11-02 22:37  小茅棚  阅读(107)  评论(0编辑  收藏  举报