JSON字符串與JSON對象的區別
Q:什么是"JSON字符串",什么是"JSON對象",兩者的區別?
a.JSON對象是直接可以使用JQuery操作的格式,如js中可以用對象(類名)點出屬性(方法)一樣
b.JSON字符串僅僅只是一個字符串,一個整體,不截取的話沒辦法取出其中存儲的數據,不能直接使用,除非你只想alert();
JSON對象
var obj = { "name": "xiaoling", "age": "18" };
JSON字符串
var obj = “{ "name": "xiaoling", "age": "18" }”;
Q:如何將JSON字符串轉為JSON對象?
方法一:$.parseJSON()
var str='{"name":"xiaoling","age":"18"}';
var obj=jQuery.parseJSON(str);
console.log(obj.name); //xiaoling
方法二:JSON.parse()
var str='{"name":"xiaoling","age":"18"}';
var obj=JSON.parse(str);
console.log(obj.name);
方法三:eval()
var str='{"name":"xiaoling","age":"18"}'; var obj=eval('('+str+')'); console.log(obj.name);
為什么要 eval這里要添加 “("("+data+")");/呢?
原因在於:eval本身的問題。 由於json是以”{}”的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成一種表達式。
加上圓括號的目的是迫使eval函數在處理JavaScript代碼的時候強制將括號內的表達式(expression)轉化為對象,而不是作為語句(statement)來執行。舉一個例子,例如對象字面量{},如若不加外層的括號,那么eval會將大括號識別為JavaScript代碼塊的開始和結束標記,那么{}將會被認為是執行了一句空語句。所以下面兩個執行結果是不同的:
Q:如何將對象轉為JSON格式的對象?
方法一:JSON.stringify(obj)
var obj={name:"xioamei", age:18} console.log("obj="+JSON.stringify(obj));
方法二:利用nodeJS中的util模塊中的 util.inspect(obj[,options])
該方法中的options有以下幾個參數:
colors:默認為false,設為true,將會以ANSI顏色的代碼風格輸出。
showHidden:默認為false,設為true,則對象的不可枚舉的屬性將會被顯示出來。
depth:默認為2,告訴inspect格式化對象的時候遞歸多少次。復雜對象的時候很有用。
customInspect:默認為true,設為false,則定義在被檢查對象上的inspect(depth,opts)方法將不會被調用。
npm install util
新建一個js文件 如此結構:
util的代碼:
var util=require('util'); var obj={ name:'xiaomei', age:18, family:{ sister:{ name:'niu', age:17 }, brothers:{ name:"lis", age:15, b_family:{ wife:"xiaoling", children:"2" } } } } console.log("obj="+util.inspect(obj,{color:true,depth:4}));