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再项目中已经定义过的。