json 字符串
形式一 多个对象传送、
- var datas="
- {
- root:
- [
- {name:'1',value:'0'},
- {name:'6101',value:'北京市'},
- {name:'6102',value:'天津市'},
- {name:'6103',value:'上海市'},
- {name:'6104',value:'重庆市'},
- {name:'6105',value:'渭南市'},
- {name:'6106',value:'延安市'},
- {name:'6107',value:'汉中市'},
- {name:'6108',value:'榆林市'},
- {name:'6109',value:'安康市'},
- {name:'6110',value:'商洛市'}
- ]
- }";
页面解析:
var obj = eval(obj); // 转换为对象
alert(obj[0].length);// 11
形式二一个对象传送、
var datas = "({name:'1',value:'0',name1:'6101',value1:'北京市',name2:'6102',value2:'天津市'})";
页面解析:
var obj = eval(obj);
alert(obj);
范例:使用Ajax 访问后台获得数据 ,将数据转换为 JSON 字符串,前台解析该Json字符串
<script type="text/javascript">
var req = null;
function getResult() {
var url = "/AjaxJson/servlet/JsonServlet?state="+new Date().getTime();
if (window.XMLHttpRequest) {
req = new XMLHttpRequest();
}else if (window.ActiveXObject) {
req = new ActiveXObject("Microsoft.XMLHTTP");
}
if(req){
req.open("GET",url, true);
req.onreadystatechange = complete;
req.send(null);
}
}
function complete(){
if (req.readyState == 4) {
if (req.status == 200) {
var city = req.responseText;
city = eval(city); //对象数组
var s = "name";
for(var i=0; i<city.length; i++){
s = "name"+i; //对象属性名 的 拼接
var obj = city[i]; // city[i].s 方式无法获取
alert(obj[s]); //索引获取对象值
}
}
}
}
</script>后台:
PrintWriter pw = response.getWriter();
String datas="{ " +
"root:[" +
"{name0:'1',value:'0'}," +
"{name1:'6101',value:'北京市'}," +
"{name2:'6102',value:'天津市'}," +
"{name3:'6103',value:'上海市'}" +
"]" +
"}";
pw.print(datas);
pw.flush();
pw.close();总结:
-
当传送对象为多个的时候".....".为 数组名:[ ]里面包括多个对象{},{}
-
注意:({})js 会将其里面内容解析成一个对象:上例中的 ( { root: [ {}, {} ] } ) 被解析成一个拥有 一个数组对象root的 对象, 如果不存在( ),将被直接解析成一个无名的对象数组
-
[ ] js 解析成 一个数组 {} 解析成一个对象
- 在上面红色字体标出,通过拼接的 对象属性名 是否只能通过对象索引[ index]方式获得,用obj.拼接的属性名 方法无法获取,有人能解释吗