您的位置:首页 > Web前端 > JavaScript

Ajax(三) — json 数据格式

2015-08-08 18:22 627 查看
为什么,学习json?

现在异构系统之间消息传递大多数的使用的都是json格式

比如
WebService 基于XML,因为要遵循多种约束,所以传递数据比较麻烦,而且在高并发的情况下,传递数据很慢。而阿里的
Dubbo 分布式服务框架(仅限于Java平台使用)的效率就非常非常高


JSON(JavaScriptObject Notation)一种简单的数据格式,比xml更轻巧。JSON是JavaScript原生格式,这意味着在JavaScript中处理JSON数据不需要任何特殊的API或工具包。

JSON的规则很简单:对象是一个无序的“‘名称/值’对”集合。一个对象以“{”(左括号)开始,“}”(右括号)结束。每个“名称”后跟一个“:”(冒号);“‘名称/值’对”之间使用“,”(逗号)分隔。

规则如下:

1)映射用冒号(“:”)表示。名称:值

2)并列的数据之间用逗号(“,”)分隔。名称1:值1,名称2:值2

3) 映射的集合(对象)用大括号(“{}”)表示。{名称1:值1,名称2:值2}

4) 并列数据的集合(数组)用方括号(“[]”)表示。

[ {名称1:值,名称2:值2},{名称1:值,名称2:值2}]

5)元素值可具有的类型:string, number, object, array, true,false, null

/**
* json中的value可以是:
*    数字类型,字符串类型,json,[],function
*/
var json1 = {};

var json2 = { //key:value
name:'aaa',
id:1,
aaa:function(){
alert("adsf");
}
};

var json3 = {//key:value(value又是一个json)
person:{
id:1,
name:'aa'
}
};
//json数组
var json4 = [
{
id:1,
name:'aaa'
},{
id:2,
name:'bbb'
}
];

var json5 = {
setPerson:function(){ //key:value(一个函数)

}
};

var json6 = {//key:json引用
aaa:json4
};

/**
* 遍历json
*/
for(var i in json2){
/**
* i代表key值
*/
alert(i);
/**
* json2[i]代表value值
*/
if(typeof json2[i] == "function"){//如果 value是一个function
json2[i]();//调用该方法
}else{
alert(json2[i]);
}
}

//查找json中的key,value的一种形式
alert("-------------"+json2["name"]);

//利用该方式可以给一个json动态的加入  key:value
json2['asdf'] = 1;
alert(json2['asdf']);

/**
* 所以说json的写法非常灵活,只要能解析,就能传递
*/


解析JSON


JSON 只是一种文本字符串。它被存储在 responseText属性中

为了读取存储在 responseText 属性中的 JSON 数据,需要根据 JavaScript 的 eval 语句。函数 eval 会把一个字符串当作它的参数。然后这个字符串会被当作 JavaScript 代码来执行。因为 JSON 的字符串就是由 JavaScript代码构成的,所以它本身是可执行的

json优点:

作为一种数据传输格式,JSON 与XML 很相似,但是它更加灵巧。

JSON 不需要从服务器端发送含有特定内容类型的首部信息。

缺点:

语法过于严谨

代码不易读

Json对象与Java对象之间的相互转换(两种方式)

一、Jackson

Jackson可以轻松的将Java对象转换成json对象和xml文档,同样也可以将json、xml转换


public class JackJsonTest {

/**
* bean 转化 json 字符串
* @throws Exception
*/
@Test
public void testBean2Json() throws Exception {

User user = new User();
user.setDescription("desc1");
user.setId(1L);
user.setName("name1");

ObjectMapper mapper = new ObjectMapper();
String jsonStr = mapper.writeValueAsString(user);
System.out.println(jsonStr);
//writeValue和writeObject有相同的功能
mapper.writeValue(System.out, user);

}

}
要导入所需
jackson-annotations-2.4.0.jar

jackson-core-2.4.5.jar

jackson-databind-2.4.5.jar


二、如果要将数组、对象、Map、List转换成JSON数据,那我们需要一些jar包:

json-lib-2.4-jdk15.jar

ezmorph-1.0.6.jar

commons-logging.jar

commons-lang.jar

commons-collections.jar

commons-beanutils.jar


@Test
public void test2(){
//将数组转换为JSON:
String[] arr = {"asd","dfgd","asd","234"};
JSONArray jsonarray = JSONArray.fromObject(arr);
System.out.println(jsonarray);

//对象转换成JSON:
User user = new User(1001,"张三");
JSONArray jsonArray = JSONArray.fromObject(user);
System.out.println( jsonArray );

//把Map转换成json, 要使用jsonObject对象:
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", 1001);
map.put("userName", "张三");

JSONObject jsonObject = JSONObject.fromObject(map);
System.out.println(jsonObject);

//把List转换成JSON数据:
List<User> list = new ArrayList<User>();
User user = new User(1001, "张三");
list.add(user);
list.add(user);
list.add(user);
JSONArray jsonArray = JSONArray.fromObject(list);
System.out.println(jsonArray);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: