json学习整理

 

JSON(javascript  Object  Notation):

JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写,同时也易于机器解析和生成。它基于JavaScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。

Json的出现:

      了解:在设计要与远程计算机进行通信的应用程序时,必须选择一种数据格式和交换协议。有多种开放式标准方案可供选择,而最理想的选择取决于应用程序需求和已有的功能。例如,基于 SOAP 的 web 服务格式化数据的方式是将 XML 负载封装到 SOAP 信封中。

XML 对于许多应用场合非常好用,但在另外一些情况下则存在缺陷,使用不太理想:比如:XML 通常使用效果不太理想的领域之一是 Ajax 风格的 web 应用程序。Ajax 是用于构建交互式 web 应用程序的技术,此类应用程序通过使用对 web 服务器的带外轻型调用来代替整页回发,从而提供了更为迅捷的用户体验。这些异步调用通过 JavaScript 在客户端进行初始化,涉及设置数据格式、将其发送到 web 服务器,以及分析和处理返回的数据。大多数浏览器可以构建、发送和分析 XML,而 JavaScript Object Notation(或 JSON)提供了一种适用于 Ajax 风格的 web 应用程序的标准数据交换格式。

 

 

如何使一种标记语言轻松集成到HTML页面中以满足Ajax的要求?

利用所有主流浏览器中的一种通用组件——JavaScript引擎。XML需要使用DOM之类的机制来访问数据并将数据整合到布局之中,我们不再使用像XML这样的格式来交付Ajax更新,而是采用一种更为简单直观的方式,采用JavaScript引擎自然匹配的格式——也就是JSON。

Json的使用场合:

JSON 是一种基于文本的开放式数据交换格式。与 XML 一样,它便于读者阅读、独立于平台,并且具有广泛的可实现性。根据 JSON 标准设置格式的数据是轻型的,可由 JavaScript 实现轻而易举地进行分析,使之成为适用于 Ajax web 应用程序的理想数据交换格式。JSON 主要是一种数据格式,因此它不局限于 Ajax web 应用程序,在任何场合,只要应用程序需要将结构化信息作为文本进行交换或存储,即可使用它。

JSON与XML的重要特征区别:

  

JSON测试需要的jar包:

 

json-lib-2.3-jdk15.jar

commons-collections.jar

commons-lang.jar

commons-logging.jar

commons-beanutils.jar

ezmorph-1.0.6.jar

xom-1.1.jar

 

 

JSON 数据格式解析

和 XML 一样,JSON 也是基于纯文本的数据格式。由于 JSON 天生是为 JavaScript 准备的,因此,JSON 的数据格式非常简单,您可以用 JSON 传输一个简单的 String,Number,Boolean,也可以传输一个数组,或者一个复杂的 Object 对象。

 

 

 

表示一个对象:、对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。比如:有一个对象中有“name”和“type” 属性

 

  {

         “name”:“万象” ,

          “type”:“软件”

}

 

 

 

表示一个数组:数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。

 

 

[“德胜”,“万象”]

 

 

 

 


表示一个集合:对象集合

 

[ {name:”万象”,type:”软件”} ,{name:”中软” ,  type:”软件”}]

 

 

 Json/数组的转换:

数组 > JSON:

//定义数组

boolean[] booleanArray = new boolean[]{true, false, true};

//得到解析后的数组

JSONArray json1 = JSONArray.fromObject(booleanArray);

结果:

1  [true,false,true]

 

    

Json/List集合的转换:

     例:项目文件夹中拥有货物参数(Shop)和货物参数列表(ShopList)两个实体

Shop包含name和property两个字段,ShopList包含Shop的列表。

    对应的json表示:这个表示两个对象

 

 

public void testBean() {

     //json解析为对象集合

        String s = "[{'name':'重量','property':'p1'},{'name':'体积','property':'P3'}]";

        JSONArray array = JSONArray.fromObject(s);

        //List list = new ArrayList();

        for (int i = 0; i < array.size(); i++) {

            JSONObject object = JSONObject.fromObject(array.get(i));

            //解析为:Bean对象

            Shop shop = (Shop) JSONObject.toBean(object, Shop.class);

            System.out.println(shop.getName() + "      >>>      " + shop.getProperty());

            //这块可以将对象添加到LIST当中,相当于转换为LIST

           //list.add(shop);

            //list.add(shop);//此处得到的就是普通的arrayList

 

 

  //集合转换为JSON

List<Object> list = new ArrayList<Object>();

        list.add(new Shop("米老鼠", "男"));

        list.add(new Shop("唐老鸭", "X"));

        JSONArray json3 = JSONA rray.fromObject(list);

        System.out.println(json3);

 

结果:[{"name":"米老鼠","property":"男"},{"name":"唐老鸭","property":"X"}]

     

 

 

 

 

 

JSON/MAP之间的转换:

 

 

  Map >  json:

//创建一个集合 添加值

        Map map = new HashMap();

        map.put("name", "json");

        map.put("bool", Boolean.TRUE);

        map.put("int", new Integer(1));

        map.put("arr", new String[]{"a", "b"});

        map.put("func", "function(i){ return this.arr[i]; }");

        //将集合解析为 json

        JSONObject jsonObject1 = JSONObject.fromObject(map);

        System.out.println(jsonObject1);

结果为:

      {"arr":["a","b"],"int":1,"name":"json","func":function(i){ return this.arr[i]; },"bool":true}

        

 

 

 因为 JSONObject本身就包含了一个Map对象存储数据,你可以像Map对象一样对其Put和Get:如

 

String s="{'a':['a','b'],'int':1,'name':'json','bool':true}";

        JSONObject object = JSONObject.fromObject(s);

        object.put("asd","sdf");

        System.out.println(object);

结果为:

      {"a":["a","b"],"int":1,"name":"json","bool":true,"asd":"sdf"}

 

 

 

 

 JSON/静态BEAN的转换:(此处“静态”意思是转换后的bean再项目中已经定义过的。

 

 

String s = "{'shopList':[{name:'重量',property:'p1'},{name:'尺寸',property:'p2'},{name:'显卡类型',property:'p3'},{name:'硬盘容量',property:'p4'},{name:'处理器',property:'p5'},{name:'内存',property:'p6'},{name:'型号',property:'p7'},{name:'货号',property:'p8'},{name:'品牌',property:'p9'}]}";

        //创建MAP

        Map<String, Object> map = new HashMap<String, Object>();

        map.put("shopList", Shop.class);

        //JSONObject.toBean()方法的三个参数分别表示数据源对应的JSON对象,转化后的对象ShopList和数据源map

        ShopList shopList = (ShopList) JSONObject.toBean(JSONObject.fromObject(s)

                , ShopList.class, map);

        //遍历shopList

        for (Iterator<Shop> i = (Iterator<Shop>) shopList.getShopList().iterator(); i.hasNext();) {

            Shop shop = i.next();

            System.out.println(shop.getProperty() + "->" + shop.getName());

        }

结果:p1->重量

p2->尺寸

p3->显卡类型

p4->硬盘容量

 

   

 

 

Json与XML的转换

 

String s = "{name:'重量',property:'p1'}";

        JSONObject object = JSONObject.fromObject(s);

        XMLSerializer serializer =  new XMLSerializer();

        String xmlObject = serializer.write(object);

        System.out.print(xmlObject);

结果:

     <?xml version="1.0" encoding="UTF-8"?>

<o>

<nametype="string">重量</name>

<property type="string">p1</property>

</o>

 

 

 

JAVASCRIPT简单的处理JSON数据:

主要问题:如何在服务器端生成 JSON 格式的数据以便发送到客户端,以及客户端如何使用 JavaScript 处理 JSON 格式的数据。

1:在客户单处理JSON数据

做一个简单的JSON对象,使用JAVASCRIPT进行解析。

 

function handleJson() {

  var j={"name":"Michael","address":

      {"city":"Beijing","street":"ChaoyangRoad","postcode":100025}

  };

  document.write(j.name);

  document.write(j.address.city);

 }

 

 

 

 

 

 

 

 

 

假如从服务器床给客户端的JSON为:

 

{"name":"Michael","address":

      {"city":"Beijing","street":"ChaoyangRoad","postcode":100025}

 };

 

 

 

 

 

 

 

 

 

 


那么得出:

将其赋值给一个 JavaScript 变量,就可以立刻使用该变量并更新页面中的信息了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值