//
<!DOCTYPE html>
<html>
<body>
<p>
JS 操作JSON
</p>
<script>
//JSON字符串
var str1 = '{"name": "danny", "age":"18" }';
document.write("str1:" + str1);
document.write("<br />");
//JSON对象
var str2 = {"name": "danny", "age":"18" };
document.write("str2:" + str2);
document.write("<br />");
//JSON字符串转换成JSON对象
//eval(),JSON字符串str1转换成JSON对象,需加上()
var str3 = eval('(' + str1 + ')');//JS 自带
document.write("str3:" + str3);
document.write("<br />");
//parseJSON(),JSON字符串str1转换成JSON对象
//var str4 = str1.parseJSON();//未成功
var str4 = JSON.parse(str1);//成功
document.write("str4:" + str4);
//对象转换成JSON对象
document.write("<br />");
//var str5 = eval('(' + str2 + ')');//eval(),报错
//var str5 = JSON.parse(str2);//报错
//var str5 = str2.parseJSON();//报错,has no method parseJSON
//document.write("str5:" + str5);
//访问结果
alert(str1.name);//运行结果:undefined,JSON String 无法用这种方式访问,需转换
alert(str2.name);//运行结果:danny
alert(str3.name);//运行结果:danny
alert(str4.name);//运行结果:danny
//alert(str5.name);//运行结果:danny
//JSON对象转换成JSON字符转
//var toJSONStr=str2.toJSONString();//运行结果has no method 'toJSONString'
var toJSONStr=JSON.stringify(str2);//成功
alert(toJSONStr);//运行结果:{"name": "danny", "age":"18" }
//为了方便处理JSON数据,JSON提供json.js包
/*
上面的多个要领中,除了eval()函数是js自带的之外,其他的多个要领都来自json.js包。新版本的 JSON 修改了 API,将 JSON.stringify() 和 JSON.parse() 两个要领都注入到了 Javascript 的内建对象里面,前者变成了 Object.toJSONString(),而后者变成了 String.parseJSON()。如果提示找不到toJSONString()和parseJSON()要领,则说明您的json包版本太低。
*/
以上代码部分运行结果:
JS 操作JSON
str1:{"name": "danny", "age":"18" }str2:[object Object]
str3:[object Object]
str4:[object Object]
参考自:http://www.cnblogs.com/worfdream/articles/1956449.html
2:JSON对象赋值,与JS对象类似,打印结果相同
//JSON字符串
var person={};//JS 对象 var person = new Object();
person.firstname="Bill";
person.lastname="Gates";
person.age=56;
person.eyecolor="blue";
document.write("str1:" + person.firstname);
document.write("<br />");
小结一:
在数据传输流程中,json是以文本,即字符串的形式传递的,而JS操作的是JS对象,因此JSON对象与JSON字符串 之间的转换是关键;
第二部分:HASH表(哈希表)
参考自:http://www.nowamagic.net/librarys/veda/detail/759
1、什么是哈希表?
哈希表就是(key, value)对,在javascript中,“对象"包括普通对象、数组对象、JSON对象、Hash对象实际上都是一个哈希表,即键值对,都可通过key获取value,通过a.key = value设置key,value
2.例子
//JSON对象、对象或数组对象
//数组对象,数组对象只能放一个
var person=new Array();//new Object()或var person={};效果一样
person['firstname']="Bill";
person['lastname']="Gates";
person['age']=56;
person['eyecolor']="blue";
document.write("str1:" + person.firstname);
document.write("str1长度:" + person.length);
document.write("<br />");
//JSON对象
var person2 = {
"name":"tom",
"age": 18
}
document.write("str2:" + person2.name);
document.write("<br />");
//Hash对象
var person3 = {
name:"tom",
age: 18
}
person3.sex = "female";
person3.toString = function(){
return this.name + "," + this.age + "," + this.sex
}
document.write("str3:" + person3.sex);
document.write("<br />");
document.write("str1ToString:" + person.toString());
document.write("<br />");
document.write("str2ToString:" + person2.toString());
document.write("<br />");
document.write("str1ToString:" + person3.toString());
document.write("<br />");
//数组,不是数组对象
person4 = ["danny", 18];
document.write("str4ToString:" + person4.toString());
document.write("<br />");
/*
小结: javascript 数组对象var a = [];a['name']=???, a['age']=18(不是数组,数组a=[1,2,3]),JSON对象,对象,实际上都是是哈希表(key,value)键值对,因此都可以用相同的方式赋值、获取,但是数组(不是数组对象)就不可以用key的方式获取value,因为数组本来就没有key
*/
部分输出结果:
JS 操作JSON
str1:Billstr1长度:0str2:tom
str3:female
str1ToString:
str2ToString:[object Object]
str1ToString:tom,18,female
str4ToString:danny,18//只有数组有toString(),其他需要写toString()方法