1,json的数据格式
名称/值对 如 "name":"张三"
例:
{
"student":[
{"name":"张三","age":15},
{"name":"李四","age":20}
]
}
个人感觉除了键的部分也要加引号(key也是String类型),整个json数据的结构和js对象的定义还是很像的。
2,json的数据格式
数字(整数或浮点数) 123 1.23
字符串(在双引号中)
逻辑值(true,false)
数组(在方括号中)
对象(在花括号中)
null
注:json本身没有日期,时间这样的数据格式,所以这些都用字符串
3,js解析json数据格式通常有两种方式------eval和JSON.parse
//eval
//上面例子中的json数据
var jsondata='{"student":[{"name":"张三","age":15},{"name":"李四","age":20}]}';
//解析成json对象
var jsonobj=eval('('+jsondata+')');
//操作json数据
alert(jsonobj.student[0].name);
//以上代码的结果是弹出了对话框 “张三” 说明json解析成功
//下面换种情况看看
//上面例子中的json数据,注意把原来张三的age值换成了 alert(123)
var jsondata='{"student":[{"name":"张三","age":alert(123)},{"name":"李四","age":20}]}';
//解析成json对象
var jsonobj=eval('('+jsondata+')');
//操作json数据
alert(jsonobj.student[0].name);
//上面代码执行结果是先弹出 123 ,再弹出 张三,说明解析json时执行了json数据里的js代码
//JSON.parse
//用JSON.parse来解析 对应jquery: $.parseJSON();
var jsondata='{"student":[{"name":"张三","age":alert(123)},{"name":"李四","age":20}]}';
//解析成json对象
var jsonobj=JSON.parse(jsondata);
//操作json数据
alert(jsonobj.student[0].name);
//结果说明都没弹出,报了一个错误,说明JSON.parse不会执行json里面的代码,并且会捕捉数据的语法错误
注:最好不要用eval解析json,特别是解析第三方数据,很危险!!!
用obj.toJSONString(); 或者obj.stringify(obj);将json对象转成字符串。
4,java对json对象的处理
现在常用的json工具包是org.json
//json对象的创建
JSONObject jsonobject=new JSONObject();
Object o=null;
try{
jsonobject.put("name","jack");
jsonobject.put("age",12);
jsonobject.put("brithday","2005-10-01");
jsonobject.put("aihao",new String[]{"篮球","羽毛球"});
//jsonobject.put("...",false);
//jsonobject.put("...",o);
}catch(JSONException e){
e.printStackTrace();
}
jsonobject.toString();//变成字符串
//用HashMap来创建json对象
Map<String,Object> map=new HashMap<String,Object>();
map.put("name","jack");
map.put("age",12);
map.put("brithday","2005-10-01");
map.put("aihao",new String[]{"篮球","羽毛球"});
JSONObject jsonobject=new JSONObject(map);
//用javaBean来创建json
//和上面一样,也是直接用构造方法,传入javaBean对象
JSONObject jsonobject=new JSONObject(javaBean);
//当然,如果已有一个json格式的字符串,也能传入到构造方法产生json对象
gson能够对json数据和对象进行更加复杂的操作,这里不延伸