我們先來看下w3cschool對json的定義:
JSON:JavaScript 對象表示法(JavaScript Object Notation)。
JSON 是存儲和交換文本信息的語法。類似 XML。
JSON 比 XML 更小、更快,更易解析。
使用中,json有以下三種結構:
- 對象:{"name":"Michael","age":24}
- 數組:比如:[{"name":"Michael","age":24},{"name":"Tom","age":25}]
- 值:{"name":"Michael", "birthday":{"month":8,"day":26}},類似於對象嵌套對象.
很多人疑惑{}和[]形式的區別。看到一段很經典的總結:大括號{}用來描述一組“不同類型的無序鍵值對集合”(每個鍵值對可以理解為OOP的屬性描述),方括號[]用來描述一組“相同類型的有序數據集合”(可對應OOP的數組)。
上面的例子中,鍵都是字符串形式,值可以取任意類型。對於var p1={name:"Michael",age:24},我們稱為對象自面量。兩者是不同的,例子后面會講到。
訪問json數據的兩種方法:
//例子 var obj={name:"Michael",age:24}; obj.name;//方式1,和java語言中訪問對象的屬性是一樣的。 alert(obj["name"]) //方式2,和js中數組的訪問方式是一樣的。
Json數據字符串化(序列化):
Json數據是跨平台的,在網絡數據傳輸流程中,json是以文本,即字符串的形式傳遞的,各種語言對字符串的處理比較統一。而在JS是 對象的形式。
JSON.stringify()將JSON對象轉為JSON字符串(序列化);
JSON.parse()將JSON字符串轉為JSON對象(反序列化)
例子:
<script>
var obj={"name":"Michael","age":24};
var obj1=JSON.stringify(obj);//注意:json全大寫
alert(obj);//彈出Object類型;說明是對象
alert(obj.name);//彈出屬性值
alert(obj1);//彈出轉化為字符后的;
var obj2 = JSON.parse(obj1);
alert(obj2)//轉換后,彈出Object類型;說明已經轉化成對象;
</script>
對象字面量的例子:
<script> var obj={name:"Michael",age:24}; alert(obj);//彈出Object類型;說明是對象 alert(obj["name"])//alert(obj.name),但是obj[name]不行 var obj1=JSON.stringify(obj);//注意:json全大寫 alert(obj1);//彈出轉化為字符后的;{"name":"Michael","address":24}; </script>
這個例子看出,對象字面量的使用方法跟json完全一樣。個人以為,可以理解為已經轉化成json了。