JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。JSON 是轻量级的文本数据交换格式
JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(JSP,PHP,.NET)编程语言都支持JSON.
JSON建构于两种结构-1
名称/值”对的集合(A collection of name/value pairs)。不同的语言中,它被理解为对象(object),纪录(record),结构(struct),字典(dictionary),哈希表(hash table),有键列表(keyed list),或者关联数组 (associative array)。 在Java语言中,我们可以将它理解成HashMap.
对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’ 对”之间使用“,”(逗号)分隔。
示例:var json = {“name”:”Jack”,”age”:90,”Marray”:true};
JSON建构于两种结构-2
值的有序列表(An ordered list of values)。在大部分语言中,它被理解为数组(array或List)。
数组是值(value)的有序集合。一个数组以“[”(左中括号)开始,“]”(右中括号)结束。值之间使用“,”(逗号)分隔。
示例:var json = [“Jack”,”Rose”,”Tom”,89,true,false];
JSON的解析:
SON的解析分成两种情况:
将Object/Array解析成JSON字符串,这种情况一般用于响应用户的输出。
将Json串解析成Object或是Array,这种情况一般用于服务器接收到了用户请求的JSON串。
目前比较流行的解析工具为:
json-lib。
fastjson.
使用json-lib解析:
准备jar包: (可以从struts2的包中找到他们,因为struts2用它)
commons-beanutils.jar
commons-collections-3.1.jar
commons-lang-2.3.jar
commons-logging.jar
ezmorph-1.0.4.jar
json-lib-2.3-jdk15.jar-这是json-lib的核心包,上面都是它的依赖包
public class TestJson {
public static void main(String [] a){
//将array解析成json串
String[] str = {"Jack","Tom","90","true"};
JSONArray json = JSONArray.fromObject(str);
System.err.println(json);
//对像数组,注意数字和布而值
Object[] o = {"北京","上海",89,true,90.87};
json = JSONArray.fromObject(o);
System.err.println(json);
//使用集合类
List
list.add("Jack");
list.add("Rose");
json = JSONArray.fromObject(list);
System.err.println(json);
//使用set集
Set
set.add("Hello");
set.add(true);
set.add(99);
json = JSONArray.fromObject(set);System.err.println(json);}}
使用JsonConfig过虑属性:适用于JavaBean
public static void main(String [] a){
JsonConfig jc = new JsonConfig();
//指定转换时,不包含那些属性
jc.setExcludes(new String[]{"name"});
Person p = new Person("A001","Tom");
JSONObject jo = JSONObject.fromObject(p,jc);
System.out.println(jo);
}
Person:
public class Person {
String id;
String name;
public String getId() {
return id;}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Person(String id, String name) {
super();
this.id = id;
this.name = name;
}
Json-lib:
将json串转换成Array:
public static void main(String [] a){
JSONArray json = JSONArray.fromObject("[\"西安智悦\",\"西安通瀛\",\"西安讯华\"]");
Object o= JSONArray.toArray(json);
System.err.println(o);
System.out.println(Arrays.asList((Object[])o));
}
复习XML文件:
XML一般是指可扩展标记语言,标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的标记语言。
XML文件的优点:
1)XML文档内容和结构完全分离。
2)互操作性强。
3)规范统一。
4)支持多种编码。
5)可扩展性强。
scores.xml:
]>
读取scores.xml
public class A{
public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException {
//0.获取scores.xml路径.scores.xml放在src目录下
//String filepath=A.class.getClassLoader().getResource("score.xml").getPath();
String filepath=Thread.currentThread().getContextClassLoader().getResource("scores.xml").getPath();
//1.创建DOM解析器工厂
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
//2.由DOM解析器工厂创建DOM解析器
DocumentBuilder db = dbf.newDocumentBuilder();
//3.由DOM解析器解析文档,生成DOM树
Document doc = db.parse(filepath);
//4.解析DOM树,获取文档内容(元素 属性 文本)
//4.1获取根元素scores
NodeList scoresList = doc.getChildNodes();
Node scoresNode = scoresList.item(1);
System.out.println(scoresList.getLength());
//4.2获取scores中所有的子元素student
NodeList studentList = scoresNode.getChildNodes();
System.out.println(studentList.getLength());
//4.3对每个student进行处理
for(int i=0;i Node stuNode = studentList.item(i); //System.out.println(stuNode.getNodeType()); //输出元素的属性 id if(stuNode.getNodeType()==Node.ELEMENT_NODE){ Element elem =(Element)stuNode; String id= elem.getAttribute("id"); System.out.println("id------>"+id); } //输出元素的子元素 name course score NodeList ncsList = stuNode.getChildNodes(); //System.out.println(ncsList.getLength() ); for(int j=0;j Node ncs = ncsList.item(j); if(ncs.getNodeType() == Node.ELEMENT_NODE){ String name = ncs.getNodeName(); //String value = ncs.getFirstChild().getNodeValue();//文本是元素的子节点,所以要getFirstChild String value = ncs.getTextContent(); System.out.println(name+"----->"+value); } } } }} 与 XML 异同 与 XML 相同之处 JSON 是纯文本 JSON 具有"自我描述性"(程序员可读) JSON 具有层级结构(值中存在值) JSON 可通过 JavaScript 进行解析 JSON 数据可使用 AJAX 进行传输 与 XML 不同之处 没有结束标签 更短 读写的速度更快 能够使用内建的 JavaScript eval() 方法进行解析 使用数组 不使用保留字 XML和JSON都使用结构化方法来标记数据,下面来做一个简单的比较。 用XML表示中国部分省市数据如下: 用JSON表示如下: { "name": "中国", "province": [{ "name": "黑龙江", "cities": { "city": ["哈尔滨", "大庆"] }}, { "name": "广东", "cities": { "city": ["广州", "深圳", "珠海"] }} ] } JSON 的语法: JSON 语法是 JavaScript 语法的子集。 数据在名称/值对中 数据由逗号分隔 大括号保存对象 中括号保存数组 JSON 名称/值对 JSON 数据的书写格式是:名称/值对。 名称/值对包括字段名称(在双引号中),后面写一个冒号, 然后是值:"firstName" : "John";
网站名称:
网站地址:
网站 slogan:
var JSONObject= {
"name":"西安通瀛",
"url":"www.51zhjob.com",
"slogan":"学的不仅是技术,更是梦想!"};
document.getElementById("jname").innerHTML=JSONObject.name
document.getElementById("jurl").innerHTML=JSONObject.url
document.getElementById("jslogan").innerHTML=JSONObject.slogan
JSON 值
JSON 值可以是:
数字(整数或浮点数)
字符串(在双引号中)
逻辑值(true 或 false)
数组
对象
null
JSON 对象
JSON 对象在花括号中书写:
对象可以包含多个名称/值对:
{ "firstName":"John" , "lastName":"Doe" }
JSON 数组
JSON 数组在方括号中书写:
数组可包含多个对象:
{"employees": [
{ "firstName":"John" , "lastName":"Doe" },
{ "firstName":"Anna" , "lastName":"Smith" },
{ "firstName":"Peter" , "lastName":"Jones" }
]}
在上面的例子中,对象 "employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。
JSON 使用 JavaScript 语法
因为 JSON 使用 JavaScript 语法,所以无需额外的软件就能处理 JavaScript 中的 JSON。
通过 JavaScript,您可以创建一个对象数组,并像这样进行赋值:
例子:
First Name:
var employees = [
{ "firstName":"Bill" , "lastName":"Gates" },
{ "firstName":"George" , "lastName":"Bush" },
{ "firstName":"Thomas" , "lastName": "Carter" }
];
employees[1].firstName="Jobs";
document.getElementById("fname").innerHTML=employees[1].firstName;
JSON 和 JS 对象互转
要实现从js对象转换为 JSON 字符串,使用 JSON.stringify() 方法:
var json = JSON.stringify({a: 'Hello', b: 'World'});
//结果是 '{"a": "Hello", "b": "World"}'
要实现从 JSON 转换为js对象,使用 JSON.parse() 方法:
var obj = JSON.parse('{"a": "Hello", "b": "World"}');
//结果是 {a: 'Hello', b: 'World'}
web中用ajax传递json数据到后台
1.首先需要导入几个json的jar包;
commons-beanutils.jar
commons-collections-3.1.jar
commons-lang-2.3.jar
commons-logging.jar
ezmorph-1.0.4.jar
json-lib-2.3-jdk15.jar
2.写jsontest.jsp页面;
function add() {
/**
当给个错误的url的时候,就会走到error方法里面,
该ajax请求会返回一个status code码,当返回值为200时,表示成功,执行success方法,否则执行error方法;
*/
/* $.ajax({
cache: true, type: "POST", url:"/Ajax/TestServlet", data:$('#form1').serialize(),// 你的formid
async: false, error: function(request) { alert("提交失败");
},
success: function(data) {
/* $("#commonLayout_appcreshi").parent().html(data);*/
/* alert(data);
$("#div1").text(data); } }); */
/** 采用json的方式进行数据传递 */
var jsonvalue = { "name" : "丫丫", "id" : 1, "password" : 123456 };
var jsonshuzu = { "name" : [ { "age" : 25, "height" : 160, "weight" : 100, "email" : "1946898935" }, { "age" : 26, "height" : 178, "weight" : 140, "email" : "1234567" } ], "address" : [ { "addressname" : "福州市"
}, { "addressname" : "厦门市" } ] }; alert("走到了add方法里面");
/**
dataType : "json":的意思是从后台返回的值必须为json格式,否则将执行error方法
*/
$.ajax({ cache : true, type : "post", url : "Ajax/TestServlet", data : { "ss" : JSON.stringify(jsonshuzu) }, async: false, error : function(request) { alert("提交失败");
}, success : function(data) { alert("data:" + data); $("#div1").text(data); } }); }