js / jquery解析json和分布式格式的方法详解
在解析之前弄清楚几个概念:复制,关联数组以及json之间有什么区别和联系点?
一,概念介绍
1,数组
ECMAScript v3规定了多个直接量的语法,JavaScript 1.2和JScript 3.0实现了它。可以把—用逗号分隔的表达式列表放在方括号中,创建并初始化—个。将成为附加元素。例如:
var a = \[1,true,'abc'\];
ps:必须方括号括号。
2,关联关联
(1)语法:
var myhash= {”key1″:”val1″, “key2″:”val2″ };//obj
(2)var
myhash= {key1:”val1″, key2:”val2″ };//obj-也可以
ps:跟json格式几乎相同,但是json格式要求更严格(里面的键值对必须使用双引号),但json只能作为一种格式标准,如果要进行进行操作必须转换成关联关联对象(obj )。
2,简单操作
(1)向哈希关联添加添加键值
// 添加一个新键 newkey ,键值为 newval
myhash[”newkey”] = “newval”;
(2)删除哈希关联数组已有键值
// 删除一个键 newkey ,同时,该键值对应的 newval 也就消失了
delete myhash[”newkey”];
(3)遍历哈希关联数组
// 遍历整个hash 数组
for (key in myhash) {
val = myhash[key];
}
(4)获得值
方式1.myhash.key1
方式2.myhash.key2
3,json
格式要求:
{“ key1”:“ val1”,“ key2”:“ val2”};
//严格按照此格式,操作可遵循关联数组的操作
二,前后台互动中几个关键点
1.当服务器发送的数据不是一条json,更多多条json时,则应连接并与关联的排列组装示例
例如:
var objs = \[{id:1,name:'n\_1'},{id: 2,名称:“ n\_2”}\];
2.至始至终服务器给客户端的数据都只是串联,因此为了让其能够在js中进行进行必要的操作,可以通过eval()进行转换成js替代对象。
因此jQuey中提供了$ .parseJSON()是有局限的,如果是上面1提到的这种情况则就必须使用eval()进行转换,然后再通过$ .each(objs,function(i,o){...} )进行操作
三,具体的实例代码
页面代码:
代码如下:
<body>
<input type="button" value="send ajax json" onclick="sendAjaxByjson();"/>
<input type="button" value="send ajax array" onclick="sendAjaxByarray();"/>
</body>
<script type="text/javascript">
function sendAjaxByjson(){
$.post("json",{},function(data){
var obj=data;
alert(typeof obj);//string
//var a=eval(obj);不解,不注释则会报错..
var strToobj=$.parseJSON(obj);
alert(strToobj.name);
alert(typeof strToobj)//obj
var obja={'name':'techbirds','age':'23','sex':'male'};
alert(typeof obja);//obj
alert(obja['name']+":"+obja.age);
delete obja['name'];
});
}
function sendAjaxByarray(){
$.post("array",{},function(data){
var str=data;
alert(typeof str);//string
alert(typeof eval(str));//object
var obja=[1,2,3,4,5];
alert(typeof obja);//object
});
}
</script>
后台代码:
代码如下:
@Override
protected void service(HttpServletRequest req, HttpServletResponse reps)
throws ServletException, IOException {
Map<String, Object> jsonMap=new HashMap<String, Object>();
jsonMap.put("name", "techbirds");
jsonMap.put("age", 23);
jsonMap.put("sex", "male");
reps.getWriter().print(JSONObject.fromObject(jsonMap).toString());
reps.getWriter().flush();
reps.getWriter().close();
}
代码如下:
@Override
protected void service(HttpServletRequest req, HttpServletResponse reps)
throws ServletException, IOException {
String array="[1,2,3,4,5,6]";
reps.getWriter().print(array);
reps.getWriter().flush();
reps.getWriter().close();
}
jQuery解析JSON数组文本
一个json对象数组的json字符串:
var str=[{"Price":12,"Name":"aaa","Age",22},{"Price":24,"Name":"bbb","Age",33}];
在前台,使用jquery的parseJSON方法来进行解析,并用jquery的foreach的方法来进行解析,代码如下:
var jsonarray= $.parseJSON(str);
alert(jsonarray);
$.each(jsonarray, function (i, n)
{
alert(n.Price);
}
对于不同版本的jquery来说,它们解析的json对象数组的字符串格式也不同,如果上述代码无法解析,就用eval函数来包裹一下,代码如下:
var jsonarray= $.parseJSON(str);
$.each(eval("(" + jsonarray+ ")"), function (i, n) {
alert(n.Price);
}
在解析json对象数组字符串的过程中,也可以使用alert来插入$ .parseJSON(str)解析后的结果,如果插入的链接中显示对象,则说明解析成功了,可以通过对象。
属性名获得到对应属性的值,如果弹出的不是对象,则用eval()来进行包装一下形成对象,再获得对应属性的值。