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"]