1. JSON的基础包括两个结构:
1)一个名值对集合,称为对象(object),名称/值对包括字段名称(在双引号中),后面写一个冒号,然后是值
例如: {"firstname":"bre","lastname":"dhja"}
- 数据在名称/值对中
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON 值可以是:
- 数字(整数或浮点数)
- 字符串(在双引号中)
- 逻辑值(true 或 false)
- 数组(在方括号中)
- 对象(在花括号中)
- null
2)一个有序的值列表,称为数组(array)
用大括号包裹:["json","is","easy"]
数组可包含多个对象(用大括号包裹),
{"emplore":[{"firstname":"li","lastname":"sun"},{"firstname":"wang","lastname":"gui"}]}
说明:
JSON数组也存在一些限制,数组中的元素必须是得到支持的值。例如,Date对象不在支持的值之列,所以不能作为JSON数组的元素或JSON对象的一个属性。String与JavaScript字符串字面量有相同的表示,不过串必须用双引号包围。Number类似于JavaScript数字字面量,不过八进制和十六进制格式未得到支持; 方法不能使用JSON表示,因为JSON语法中不包括函数字面量。另外,JavaScript的new操作符也不是JSON语法的一部分,不能在对象或数组中使用。
2. 把 JSON 文本转换为 JavaScript 对象
创建包含 JSON 语法的 JavaScript 字符串:
var txt='{"emplore:['+'{"firstname":"li","lastname":"gui"},'+'{"firstname":"sun","lastname":"er"}]"}';
var obj=eval("("+txt+")");
document.getElementById("usrname").innerHtml=obj.emplore[1].firstname;
3.Java代码转换成json代码
1)List集合转化为json对象
List list=new List();
list.add("zhang");
list.add("li");
JSONArray objson=JSONArray.fromObject(list);
String str=objson,toString()//将json对象转为
2)Map集合转换成json代码
Map map = new HashMap();
map.put("name", "json");
map.put("bool", Boolean.TRUE);
map.put("int", new Integer(1));
map.put("arr", new String[] { "a", "b" });
map.put("func", "function(i){ return this.arr[i]; }");
JSONObject json = JSONObject.fromObject(map);
3.) Bean转换成json代码
JSONObject jsonObject = JSONObject.fromObject(new JsonBean());
4). 数组转换成json代码
boolean[] boolArray = new boolean[] { true, false, true };
JSONArray jsonArray1 = JSONArray.fromObject(boolArray);
5). 一般数据转换成json代码
JSONArray jsonArray3 = JSONArray.fromObject("['json','is','easy']" );
6). beans转换成json代码
List list = new ArrayList();
JsonBean2 jb1 = new JsonBean2();
jb1.setCol(1);
jb1.setRow(1);
jb1.setValue("xx");
JsonBean2 jb2 = new JsonBean2();
jb2.setCol(2);
jb2.setRow(2);
jb2.setValue("");
list.add(jb1);
list.add(jb2);
JSONArray ja = JSONArray.fromObject(list);
4.使用过程(例如,在js当中读取后台数据)
首先从后台获得json形式的数据,放入以上类型(集合或者数据)当中,然后将其转为JSON对象(JSONArray或者JSONobject.fromObject())
然后可以在转为string字符串,在前台js当中,调用javascript的eval()方法将其转为javascript对象依次循环读取数据。
List<java bean对象> list=bean.getList();//通过javaBean对象bean,调用bean里面的getList()方法,返回一个list对象,该对象包含所需的json形式的数据(值对或者数组形式)
JSONArray jsonarray=JSONArray.fromObject(list)//将list对象转为json对象
PrintWrite pw=response.getWriter();
pw.print(jsonarray.toString);
//下面在前台js当中读取数据
success:function(msg){//AJAX请求成功的函数
var jsonmessage =eval(""+msg+"");
$(jsonmessage).each(function(i){
//循环返回的内容
$("#mess1").append(
jsonmessage[i].name+jsonmessage[i].age;
)
})
}