一、json字符串与js对象之间的转换:
JS对象->标准JSON字符串
JSON.stringify(value,[replacer],[space]):
replacer的作用:
为数组时,对Map型或者对象型的value进行属性筛选(replacer是以value中key组成的数组);
为函数时,对每一个传入的key,value进行对应的function(key,value)处理
space的作用:格式化将要返回的字符串并利用传入的space参数进行缩进:
{
space key:value,
space key:value,
...
}
JQuery对象->标准JSON字符串
jquery对象.serialize():能够将jquery对象以attr('name'):attr('value')的形式构成标准JSON字符串返回(form表单,checkbox对应的jquery对象都行)
非标准JSON字符串->JS对象:
eval('('+commonJSONstr+')')
--补充说明:eval 本身的问题。 由于 json 是以 {} 的方式来开始以及结束的,在 js 中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
标准JSON字符串->JS对象:
eval('('+standardJSONstr+')')
标准JSON字符串->Java对象:
标准JSON字符串->过渡对象->map:
json字符串无法直接转化成map,这里我们先将相应的mapStr转换成"结构一致"的Bean对象(这里我们起名为MapBean,MyBean类的数据结构要与对应的Map结构一致)
JSONObject.toBean(JSONObject.fromObject(mapStr),similarBeanType,propertyName_propertyType_Map);
---例子:
public static void jsonToMap(){
String strObject="{\"first\":{\"address\":\"中国上海\",\"age\":\"23\",\"name\":\"JSON\"}}";
//JSONObject
JSONObject jsonObject=JSONObject.fromObject(strObject);
Map map=new HashMap();
map.put("first",Student.class);
//使用了toBean方法,需要三个参数
MyBean my=(MyBean)JSONObject.toBean(jsonObject,MyBean.class, map);
System.out.println(my.getFirst());
}
public class MyBean {
private Student first;
public Student getFirst() {
return first;
}
public void setFirst(Student first) {
this.first = first;
}
}
打印结果:Student [name=JSON, age=23, address=中国上海]
标准JSON字符串->过渡对象->list:JSONObject.toList(JSONObject.fromObject(arrStr),elementType);Java对象->标准JSON字符串:
map,普通对象->过渡对象->标准JSON字符串:JSONObject.fromObject(jsonStr).toString();
list,数组->过渡对象->标准JSON字符串:JSONArray.fromObject(jsonStr).toString();
struts2中的json结果集默认会将Action中的getter对应的属性以键值对"属性:getter"形式组成一个标准JSON字符串利用response来print到页面中或传递到ajax的回调参数data中
注意:
1.JSON对象是存在于JavaScript中的,java中不存在该对象,java中有的仅仅只是JSON字符串.
2.JavaScript默认会对JSON对象解析让其变成普通JS对象,JSON对象与JS对象在使用上没有什么差别,所以本文中把JS对象与JS中的JSON对象统称为JS对象