js json array

// 使用JavaScript 语法创建对象  先定义一个函数,作为构造函数
//  通过该方式创建的对象是一般的脚本对象
function Person(lname, sex){
 this.lname=lname;
 this.sex=sex;
}
// 创建一个实例
var p=new Person('张三','男');
// 输出Person 实例
alert(p.lname);

//使用JSON 语法创建数组
var arr=['a','bbc'];
alert(arr[1]);

//创建Json对象的语法 ,如下:
var obj= { "name": " 张三 " , "sex" : ' 男 ' } ;
alert(obj.sex);

//json 格式的对象和json 文本是不同的
var obj={"lname":" 张三 ","sex":'男 '}; //json 格式的对象
var str=' { "lname": " 张三 " , "sex" : " 男"}'; //json 格式的字符串( json 格式的文本)
alert(typeof(obj) +' '+  typeof(str) );  // 结果是 object string

var  myhash = {}; //Hash关联数组定义
var  myhash2 = {"loo":"pp" ,yyy:"hgh"}; //Hash关联数组定义
var   myArray = ["ll","kk", "po"]; //[]定义 一唯数组
var   myNewArray = new Array(); //用Array 定义
var   myNewArray1 = new Array(["w1","w2","w3"],"kk2", "kkj"); //用Array 定义
alert(typeof(myhash) +' '+  typeof(myArray) +' '+  typeof(myNewArray));
// 结果是 object object object
var   myArray ={"mkk":["ll","kk", "po"]};
myhash.mm = "oop";
myhash['mm2'] = "oop2";
myArray["pl"] = 12;
alert(myArray["pl"]);  //12
alert(myArray[0]);    // "ll"
alert(myArray["0"]);  //"ll"
alert(myhash2["loo"]);  // "pp"
alert(myhash2["yyy"]);  //"hgh"
alert(myhash2.yyy);  //"hgh"
alert(myhash.mm);  //"oop"
alert(myhash.mm2);  //"oop2"
alert(myNewArray1[0][1]);  //"w2"
alert(myNewArray1[1]);  //"kk2"
alert(myNewArray1["ff1"]);  //"kk2"
alert(myArray.mkk[1]);  //"kk"
// 结论:var  myhash2 = {"loo":"pp" ,yyy:"hgh"}; //Hash关联数组定义, 这里 {}内必须全部都是
//    {键:值, 键:值...}结构。
// var   myArray = ["ll","kk", "po"]; //[]定义 一唯数组
//    var   myNewArray1 = new Array(["w1","w2","w3"],"kk2", "kkj");
//   这里 [ ]内必须全部都是   [值, 值...]  结构。

var obj ={'name':'冯娟','password':'123456','department':'技术部','sex':'女','old':30};
var str ='';
for(var p in obj)
{
str = str+obj[p]+',';  // '冯娟','123456','技术部','女',30
//str = str+p+',';       //'name','password,'department','sex','old'
}
alert(str);

var obj ={0:'name',13:'password',2:'department',3:'sex',4:'old'};
//var obj =['冯娟','123456','技术部','女',30];
alert(obj[13]);
// 当键名为数字时, 只能用这种方引用, 而不能这样引用: alert(obj.13);
//当json的键为数字: 对于数字键名或者非正常变量字符(比如有空格),必须使用 aa[x]的方式。

var str ='';
for(var p in obj)
{
//str = str+obj[p]+',';  // '冯娟','123456','技术部','女',30
str = str+p+',';       //0,1,2,3,4,
}
alert(str);

//JSON 格式的json 对象 和JSON 文本的转换
//使用eval 来转换JSON 字符到JSON 格式的Object
var str = '[{ "name": " 张三", "sex": " 男" , "age":30, "ff":{ "sex": " 男" , "age":30}},{ "sex": " 男" , "age":30}]';
//var obj = eva('(' + str + ')');
var obj = eva(str);
//这里,上面两种命令都可以

function json2str(o) {
  var arr = [];
  var fmt = function(s) {
  if (typeof s == 'object' && s != null) return json2str(s);
 // return /^(string|number)$/.test(typeof s) ? "'" + s + "'" : s;
  return /^(string)$/.test(typeof s) ? "'" + s + "'" : s;
   }
 for (var i in o) arr.push("'" + i + "':" + fmt(o[i]));
    return '{' + arr.join(',') + '}';
}

var newJSONtext =  json2str(obj) ;
var obj2 = eva("("+newJSONtext+")");
//这里,var obj2 = eva(newJSONtext); 报错 
alert( newJSONtext);
alert( obj2[1].sex);

var aajson =  '{ "name": " 张三", "sex": " 男" }';
var obj = JSON.parse(aajson);

 

jquery ajax 异步获取的数据类型——json对象和字符串处理方式 :
1.对于服务器返回的JSON字符串,如果jquery异步请求没做类型说明,或者以字符串方式接受,那么需要做一次对象化处理,方式不是太麻烦,就是将该字符串放于eval_r()中执行一次。这种方式也适合以普通javascipt方式获取json对象,以下举例说明:
var dataObj=eval_r("("+data+")");//转换为json对象
alert(dataObj.root.length);//输出root的子对象数量
$.each(dataObj.root,fucntion(idx,item){
if(idx==0){
return true;
}
//输出每个root子对象的名称和值
alert("name:"+item.name+",value:"+item.value);
})
注:对于一般的js生成json对象,只需要将$.each()方法替换为for语句即可,其他不变。
2.对于服务器返回的JSON字符串,如果jquery异步请求将type(一般为这个配置属性)设为“json”,或者利用$.getJSON()方法获得服务器返回,那么就不需要eval()方法了,因为这时候得到的结果已经是json对象了,只需直接调用该对象即可,这里以$.getJSON方法为例说明数据处理方法:
$.getJSON("http://www.phpzixue.cn/",{param:"gaoyusi"},function(data){
//此处返回的data已经是json对象
//以下其他操作同第一种情况
$.each(data.root,function(idx,item){
if(idx==0){
return true;//同countinue,返回false同break
}
alert("name:"+item.name+",value:"+item.value);
});
});

这里特别需要注意的是方式1中的eval_r()方法是动态执行其中字符串(可能是js脚本)的,这样很容易会造成系统的安全问题。所以JSON提供了专门的 json.js 文件
一、JSON字符串转换为JSON对象
var obj = str.parseJSON();  或者 var obj = JSON.parse(str);
如果obj对一个本来就是JSON对象使用eval()函数,不管使用多次,还是JSON对象。但是如果使用parseJSON()函数处理,会有问题(抛出语法异常)。

二、JSON对象转化为JSON字符
var last=obj.toJSONString(); 或者 var last=JSON.stringify(obj);
新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个方法都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()方法,则说明您的json包版本太低。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值