web前端開發過程中,資料傳輸json是以字串的形式傳遞,而js操作的是json物件。
一、json字串轉換為json物件
var obj =json.parse(str[, reviver]);
例:
json.parse('{}'); // {}json.parse('true'); // true
json.parse('"foo"'); // "foo"
json.parse('[1, 5, "false"]'); // [1, 5, "false"]
json.parse('null'); // null
json.parse('1'); // 1
reviver:如果是乙個函式,則在被返回之前對原始值執行其方法後返回。
解析json字串並返回對應的值,可以額外傳入乙個轉換函式,用來將生成的值和其屬性, 在返回之前進行某些修改。函式的引數k、v、分別代表返回的屬性名和屬性值
json.parse('', function (k, v) ); //json.parse('}}', function (k, v) );
// 1
// 2
// 4
// 6
// 5
// 3
// ""
二、將json物件轉化為json字串。
json.stringify(value[, replacer [, space]])
value
將要序列化成 乙個json 字串的值。
replacer
可選如果該引數是乙個函式,則在序列化過程中,被序列化的值的每個屬性都會經過該函式的轉換和處理。
space
可選指定縮排用的空白字串,用於美化輸出(pretty-print);如果引數是個數字,它代表有多少的空格;上限為10。該值若小於1,則意味著沒有空格;如果該引數為字串(字串的前十個字母),該字串將被作為空格;如果該引數沒有提供(或者為null)將沒有空格。
例:
json.stringify({}); // '{}'json.stringify(true); // 'true'
json.stringify("foo"); // '"foo"'
json.stringify([1, "false", false]); // '[1,"false",false]'
json.stringify(); // ''
json.stringify();
// ""
json.stringify([new number(1), new string("false"), new boolean(false)]);
// '[1,"false",false]'
json.stringify();
// '{}'
json.stringify([undefined, object, symbol("")]);
// '[null,null,null]'
json.stringify();
// '{}'
json.stringify(, [symbol.for("foo")]);
// '{}'
json.stringify(
, function (k, v)
});// undefined
// 不可列舉的屬性缺省會被忽略:
json.stringify(
object.create(
null,
, y: })
);// ""
如果replacer是乙個陣列,陣列的值代表將被序列化成json字串的屬性名。
json.stringify(foo, ['week', 'month']);// '', 只保留「week」和「month」屬性值。
一些時候,你想儲存使用者建立的乙個物件,並且,即使在瀏覽器被關閉後仍能恢復該物件。下面的例子是json.stringify
適用於這種情形的乙個樣板:
// 建立乙個示例資料var session = ;
session.screens.push();
session.screens.push();
session.screens.push();
session.screens.push();
session.screens.push();
session.screens.push();
// 使用 json.stringify 轉換為 json 字串
// 然後使用 localstorage 儲存在 session 名稱裡
localstorage.setitem('session', json.stringify(session));
// 然後是如何轉換通過 json.stringify 生成的字串,該字串以 json 格式儲存在 localstorage 裡
var restoredsession = json.parse(localstorage.getitem('session'));
// 現在 restoredsession 包含了儲存在 localstorage 裡的物件
console.log(restoredsession);
四、對於ie8以下舊版本的支援polyfill
json
物件可能不被老版本的瀏覽器支援。可以將下面的**放到js指令碼最開始的位置,這樣就可以在沒有原生支援 json 物件的瀏覽器(如ie6)中使用json
物件。
以下演算法是對原生json
物件的模仿:
if (!window.json) ,stringify: (function () ;
var escmap = ;
var escfunc = function (m) ;
var escre = /[\\"\u0000-\u001f\u2028\u2029]/g;
return function stringify(value) else if (typeof value === 'number') else if (typeof value === 'boolean') else if (typeof value === 'object') else if (isarray(value)) else if (tostring.call(value) === '[object object]')
return '';}}
return '"' + value.tostring().replace(escre, escfunc) + '"';
};})()
};}
也可以引入json3.js的cdn
js中json字串與json物件格式轉換
本篇部落格整理記錄了一下js和json之間轉換的幾種情況和方法,順便記錄一下自己在工作上遇到的乙個小問題 看似很簡單!但當時頭腦不清醒寫了很久!敲篇部落格敲打自己 最近在公司開發乙個頁面,由於element框架的需要,我需要介面給我返回下面這種格式的資料 initialdata 可是問題來了,在修改...
JSON字串與JSON物件
在資料傳輸流程中,json是以文字,即字串的形式傳遞的,而js操作的是json物件,所以,json物件和json字串之間的相互轉換是關鍵。例如 json字串 var str1 json物件 var str2 要運用上面的str1,必須運用下面的要領先轉化為json物件 這一點在ajax返回的時候,經...
JS 操作JSON,字串與JSON之間轉換
1 字串轉json json.parse string 2 json轉字串 json.stringify obj 3 json物件追加資料 使用push方法,用法如下 現在的json資料a為 b的資料格式要和a相同,使用a.push b 後,a的資料為 目前發現push這個方法只能追加第乙個子級的資...