JSON:JavaScript Object Natation,用一句话总结就是:一种轻量级的、实现服务器与客户端交互的、完全独立的数据交换语言。
1、JSON的两种数据格式
A开始与结束的标志"{","}",里面放着各种key、value值并以“,”分隔。
B如果多个JSON组合就是有序的value集合,我们称之为JsonArray,他的构造形如[{},{},{}....]
2、java生成JSON对象
JSONObject obj = new JSONObje--------------ct();//new一个JSON对象
obj.put("key", "^^");//json对象存个值
System.err.println(obj);
运行的结果为{"key":"^^"}
3、java生成JsonArray对象
JSONArray array = new JSONArray();
JSONObject obj = new JSONObject();
obj.put("key", "呵呵");
array.add(obj);
JSONObject obj1 = new JSONObject();
obj1.put("key", "嘿嘿");
array.add(obj1);
System.err.println(array);
运行的结果为[{"key":"呵呵"},{"key":"嘿嘿"}]
4、java中String字符串与Json转换
json数组格式的字符串可以通过方法直接转换为JSONArray的格式:
String aaa = "[{name1:{name2:{name3:'value1',name4:'value2'}}},{}]";
JSONArray.fromObject(aaa)
JSONArray getJsonArray=JSONArray.fromObject(arrayStr);//将结果转换成JSONArray对象的形式
JSONObject getJsonObj = getJsonArray.getJSONObject(0);//获取json数组中的第一项
String result=getJsonObj.getJSONObject("name1").getJSONObject("name2").getJSONObject("name4");
5、java解析JSon
// 一个未转化的字符串 String str = "[{name:'a',value:'aa'},{name:'b',value:'bb'},{name:'c',value:'cc'},{name:'d',value:'dd'}]" ; // 首先把字符串转成 JSONArray 对象 JSONArray json1 = JSONArray.fromObject(str ); if(json1.size()>0){ for(int i=0;i<json1.size();i++){ // 遍历 jsonarray 数组,把每一个对象转成 json 对象 JSONObject job = json1.getJSONObject(i); // 得到 每个对象中的属性值 System.out.println(job.get("name")+"=") ; } }
6、JSON 和 JS 对象互转
JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
如:
var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串
要实现从对象转换为 JSON 字符串,使用 JSON.stringify() 方法:
var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'
要实现从 JSON 转换为对象,使用 JSON.parse() 方法:
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}
7、jquery JSON的解析方式
一、eval()
对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明(type:json),或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于eval()中执行一次:
var dataObj=eval("("+data+")");//转换为json对象
alert(dataObj.root.length);//输出root的子对象数量
$.each(dataObj.root,fucntion(idx,item){
if(idx==0){
return true;
}
//输出每个root子对象的名称和值
alert("name:"+item.name+",value:"+item.value);
})
注:对于一般的js生成json对象,只需要将$.each()方法替换为for语句即可,其他不变。
二、jQuery解析Json对象:
jQuery提供了另一种方法“parseJSON”,这需要一个标准的JSON字符串,并返回生成的JavaScript对象。例如:
var parsedJson = $.parseJSON(results);
alert(parsedJson.name);