js操作json时,常用的是使用[]或者.来获取json属性的值。使用上还是有些区别的。
https://www.cnblogs.com/wisdo/p/5905543.html
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。其属性值的获取有三种方法
1. 对象名.属性名, 类似于高级语言的写法
var obj = '{"name":"wisdo", "age":"20"}'; var data = eval('('+ obj +')'); alert(obj.name);
2. 以数组索引的方式来访问
var obj = '{"name":"wisdo", "age":"20"}'; var data = eval('('+ obj +')'); alert(obj[0]); // 输出的是 name
3. 以字典索引的方式来访问
var obj = '{"name":"wisdo", "age":"20"}'; var data = eval('('+ obj +')'); alert(obj['name']); // 输出的是 name 值
在通常的情况下,一般是使用第一种方法,即通过对象名.属性名 的方式来访问,这样对于使用高级语言的编程很直观,也很容易理解,但这也有局限性,属性的名称要规范,key 要以字母或下划线开头的包括字母、下划线和数字的字符串,不能以数字开头.
总结
data.key和data[’key’]各自有自己的应用场景,一般情况使用data.key即可,也比较直观(它符合其它高级语言中访问对象中属性的方式);当key为一个变量时,并且使用在循环中,用data['key']这种方式。
for(var i=0; i < 10; i++) { s += data['key' + i]; //循环调用,可简化代码}
以数组索引的方式来访问,虽然不推荐,但也是有其应用价值的;如当建立一个与数据库中id一一对应的map对象的时候,可直接用id的数值做key,虽然你可以给它加上一个字母前缀来让它符合合法的变量名的标准并让它的数据能通过data.key的方式访问.
使用[]或者.来获取json属性的值,还是有不同的地方的。可以参看下面的
https://blog.csdn.net/weixin_33676492/article/details/88661517
访问对象值
1、你可以使用点号.来访问对象的值:
var myObj, x; myObj = { "name":"runoob", "alexa":10000, "site":null }; x = myObj.name;
2、你也可以使用中括号[ ]来访问对象的值:
var myObj, x; myObj = { "name":"runoob", "alexa":10000, "site":null }; x = myObj["name"];
3、从功能上说,这两种方法没有任何区别。但方括号语法有一个优点:可以通过变量来访问属性,如:
var propertyName = 'name'; alert(myObj [propertyName]);
json 在进行通过键名来获取值时,需要特别注意一下。
把键名赋值给另外一个变量,然后通过.方式去获取值。这种方式是行不通的。
var myObj, x; myObj = { "name":"runoob", "alexa":10000, "site":null }; x = "name"; document.getElementById("demo").innerHTML = myObj.x; // 结果是 undefined
只能通过 [] 方式去访问:
var myObj, x; myObj = { "name":"runoob", "alexa":10000, "site":null }; x = "name"; document.getElementById("demo").innerHTML = myObj[x]; // 结果是 runoob
还有在使用for遍历时,只能通过 myObj[x] 来获取相应属性的值,而不能使用 myObj.x
总结,键名为变量时只能用 []来获取相应属性值。
还有!如果属性名中包含会导致语法错误的字符,或者属性名是关键字或者保留字,也是使用方括号表示法。如:
var response = { "awards":{'105':50, '107':10,'108':5,'110':3,'111':2, '112':1} }; console.log(response.awards['105']) //50 console.log(response.awards.105) //报错
循环对象
1、你可以使用 for-in 来循环对象的属性:key
var myObj = { "name":"runoob", "alexa":10000, "site":null }; for (x in myObj) { document.getElementById("demo").innerHTML += x + "<br>"; }
2、**在 for-in 循环对象的属性时,使用中括号([])来访问属性的值:value
在使用for遍历时,只能通过 myObj[x] 来获取相应属性的值,而不能使用 myObj.x**
var myObj = { "name":"runoob", "alexa":10000, "site":null }; for (x in myObj) { document.getElementById("demo").innerHTML += myObj[x] + "<br>"; }
嵌套 JSON 对象 value 可以是合法的 JSON 数据类型
1、JSON 对象中可以包含另外一个 JSON 对象:
myObj = {
"name":"runoob", "alexa":10000, "sites": { "site1":"www.runoob.com", "site2":"m.runoob.com" } }
2、你可以使用点号(.)或者中括号([])来访问嵌套的 JSON 对象。
x = myObj.sites.site1; // 或者 x = myObj.sites["site1"];
修改值
1、你可以使用点号(.)来修改 JSON 对象的值:
myObj.sites.site1 = "www.google.com";
2、你可以使用中括号([])来修改 JSON 对象的值:
myObj.sites["site1"] = "www.google.com";
删除对象属性
1、我们可以使用 delete 关键字来删除 JSON 对象的属性:
delete myObj.sites.site1;
2、你可以使用中括号([])来删除 JSON 对象的属性:
delete myObj.sites["site1"]