JSON解析
关于json的解析,可以分为js/jquery解析和Java解析;
js/jquery解析json:
①eval()方法
将json字符串解析成json对象,并通过jQuery的each()函数或者普通的for循环对json数据进行遍历;
**注:eval()函数的调用,eval(“(“+data+”)”);
②new Function()—->不建议使用,存在安全和性能问题
function toJson(str){
var json = (new function("return "+str))();
}
③JSON.parse()
用于从一个字符串中解析出一个json对象。
相对应的可以通过JSON.stringify()将一个json对象转换成一个字符串
var str='{"name":"cpf","age":"23"}';
**单引号写在{}外,每个属性都必须双引号,否则会抛出异常
经JSON.parse(str) 得到:
Object: age:"23"
name:"cpf"
var obj={a:1,b:2}
经JSON.stringify(obj)得到:
"{"a":1,"b":2}"
*注:JSON.parse()这种方法只支持IE8/Firefox3.5+/Chrome4/Safari4/Opera10 以上版本,这些浏览器都已经接近W3C标准,默认实现了toJSON方法。
④JQuery.getJSON(url,[data],[callback])
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?", function(data){
$.each(data.items, function(i,item){
$("<img/>").attr("src", item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});
java解析json:
package cn.test.com;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
public class JSONReaderTest {
private static final String jsonString = "{\"name\":\"三班\",\"students\":[{\"age\":25,\"gender\":\"female\","
+ "\"grades\":\"三班\",\"name\":\"露西\",\"score\":{\"数据结构\":98,\"JavaEE\":92,"
+ "\"计算机基础\":93},\"weight\":51.3},{\"age\":26,\"gender\":\"male\",\"grades\":\"三班\","
+ "\"name\":\"杰克\",\"score\":{\"网络安全\":75,\"Linux操作系统\":81,\"数据结构\":92},"
+ "\"weight\":66.5},{\"age\":25,\"gender\":\"female\",\"grades\":\"三班\",\"name\":\"莉莉\","
+ "\"score\":{\"网络安全\":95,\"Linux操作系统\":98,\"SQL数据库\":88,\"数据结构\":89},\"weight\":55}]}";
public static void main(String[] args) {
//将jsonString转换成jsonObject,{}括起来的
JSONObject jsonObject = JSONObject.fromObject(jsonString);
System.out.println("name:"+jsonObject.get("name"));
//获取students中的数组,[]括起来的
JSONArray data = jsonObject.getJSONArray("students");
JSONObject json = null;
//遍历数据
for(int i=0;i<data.size();i++){
json = data.getJSONObject(i);
System.out.println("grades:"+json.get("grades"));
JSONObject score = json.getJSONObject("score");
System.out.println("score:"+score.getInt("数据结构"));
}
//还可以将数据保存到javabean中
//jsonObject.toBean(json,Class.class);
//或者将获取到的数据保存到list中
}
}