国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

JSON簡介以及用法代碼匯總

2019-11-17 02:03:59
字體:
供稿:網(wǎng)友

JSON簡介以及用法代碼匯總

什么是JSON?

  javaScript 對象表示法(JavascriptObjectNotation)。

  JSON是一種輕量級的數(shù)據(jù)交換格式,某個JSON格式的文件內(nèi)部譬如可以長成這樣:

{  "name": "hanzichi",  "sex": "male"}

  看起來都是key-value的鍵值對,很像js的對象吧?沒錯,但同時JSON表示不服,我不能跟js的對象長成一樣啊,我得有我自己的個性,于是規(guī)定鍵-值對中的鍵必須用雙引號!同時規(guī)定鍵-值對中的值的取值有一定要求:

  JSON 值可以是:

  1. 數(shù)字(整數(shù)或浮點數(shù))
  2. 字符串(在雙引號中
  3. 邏輯值(true 或 false)
  4. 數(shù)組(在方括號中)
  5. 對象(在花括號中)
  6. null

  除以上6種外,再無其他,沒有像js一樣的undefined、NAN,JSON拒絕使用。

 如何使用JSON?

  JSON一般以字符串的形式在數(shù)據(jù)交互過程中游走,so對于js而言,如何將json字符串和js對象之間進(jìn)行相互轉(zhuǎn)換顯得尤為重要。

  • eval大法(json字符串 -> js對象)
var jsonStr = '{"name": "hanzichi", "sex": "male"}';var ans = eval('(' + jsonStr + ')');console.log(ans.name, ans.sex);// hanzichi male 

  eval函數(shù)非常快,但是它可以編譯任何javascirpt代碼,這樣的話就可能產(chǎn)生安全的問題。eval的使用是基于傳入的代碼參數(shù)是可靠的假設(shè)下,有一些情況下,可能客戶端是不可信任的。如果基于安全的考慮的話,最好是使用一個JSON解析器,一個JSON解析器將只接受JSON文本,所以是更安全的,如下。

  • JSON.parse(json字符串 -> js對象)
var jsonStr = '{"name": "hanzichi", "sex": "male"}';var obj = JSON.parse(jsonStr);console.log(typeof obj, obj); // object Object {name: "hanzichi", sex: "male"} 

  第二個參數(shù)可以是函數(shù),可以對值進(jìn)行刪改:

var jsonStr = '{"name": "hanzichi", "sex": "male", "age": 10}';var obj = JSON.parse(jsonStr, function(key, value) {  if(key === 'name') {    return 'my name is ' + value;  }  return value;});console.log(typeof obj, obj); // object Object {name: "my name is hanzichi", sex: "male", age: 10} 
  • JSON.stringify(js對象 -> json字符串)
var obj = {name: 'hanzichi', sex: 'male', age: '10'};var jsonStr = JSON.stringify(obj);console.log(jsonStr);  // {"name":"hanzichi","sex":"male","age":"10"}

  也可以加個參數(shù),規(guī)定需要轉(zhuǎn)化為json字符串的屬性(數(shù)組形式,跟數(shù)組同名的js對象屬性才會被轉(zhuǎn)換):

var obj = {name: 'hanzichi', sex: 'male', age: '10'};var jsonStr = JSON.stringify(obj, ['name']);console.log(jsonStr);  // {"name":"hanzichi"}

  第二個參數(shù)也可以是個函數(shù),可以刪選符合條件的屬性(或者改變屬性值,沒有return表示放棄該屬性,return的值表示該key在json字符串中的值)

var obj = {name: 'hanzichi', sex: 'male', age: '10'};var jsonStr = JSON.stringify(obj, function(key, value) {  if(key === 'name') {    return 'my name is ' + value;  }  return value;});console.log(jsonStr);  // {"name":"my name is hanzichi","sex":"male","age":"10"} 

  還可以有第三個參數(shù),可以是數(shù)字或者字符串。

  如果是數(shù)字的話,表示縮進(jìn),數(shù)字大小超過10了按10處理。

var obj = {name: 'hanzichi', sex: 'male', age: '10'};var jsonStr = JSON.stringify(obj, null, 4);console.log(jsonStr);  // {//     "name": "hanzichi",//     "sex": "male",//     "age": "10"http:// }

  也可以是字符串,會在屬性前加上這些字符串充當(dāng)前綴,同樣字符串長度超過10只截取10:

var obj = {name: 'hanzichi', sex: 'male', age: '10'};var jsonStr = JSON.stringify(obj, null, '

  這里我有個疑問,我覺得輸出應(yīng)該是如下形式才對啊...

{"prename": "hanzichi","presex": "male","preage": "10"}

  麻煩有知道的大大能傾情告訴我...

 總結(jié)

  當(dāng)然傳說中的ie8(及以下)因為某種缺陷不能使用JSON.parse()以及JSON.stringify()方法,而eval()又顯得不安全,如果要兼容它們的話可以引用json2.js。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 贵定县| 浠水县| 武冈市| 邵阳县| 陆河县| 大渡口区| 买车| 永济市| 白银市| 大姚县| 庆安县| 桐柏县| 江陵县| 当阳市| 象山县| 巢湖市| 喀什市| 鄯善县| 左贡县| 乐安县| 麟游县| 丰都县| 盐津县| 温州市| 腾冲县| 宁强县| 司法| 黎川县| 慈利县| 台南县| 大连市| 曲阜市| 宜都市| 九江县| 绥芬河市| 长顺县| 灵武市| 屏南县| 巫溪县| 常宁市| 泸定县|