最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談JSON5解決了JSON的兩大痛點

 更新時間:2020年12月14日 08:59:28   作者:喬珂力  
這篇文章主要介紹了淺談JSON5解決了JSON的兩大痛點,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

JSON 格式可以說是目前最流行的數(shù)據(jù)傳輸格式了,被廣泛應(yīng)用于前后端通信,尤其是在 SPA 應(yīng)用中,JSON 數(shù)據(jù)通過 HTTP 協(xié)議進(jìn)行傳輸,具有體積小、易序列化、可讀性好等優(yōu)點。(當(dāng)然,這些優(yōu)點是相對的,例如體積小是相對于 XML 而言的,如果跟 protobuf 比,那體積就大多了。)
JSON 雖好,但是仍有兩大痛點讓開發(fā)者苦惱不已:

  • 不能添加注釋(這個不能忍)
  • 序列化之后的 key 被加上了雙引號(體積變大了)

如何添加注釋

目前的標(biāo)準(zhǔn)是不能添加注釋,如果想添加的話,只能曲線救國了,例如我是這么干的:

{
 "----------base----------": "通用模塊變量定義",
 "common": {
 "object_not_exit": "對象 ${id} 不存在!",
 "invalid_username_or_password": "用戶名或密碼錯誤!"
 },
 "----------sms----------": "短信模塊相關(guān)變量",
 "sms": {
 "template_missing_parameters": "模板缺少變量!",
 "param_length_limit": "參數(shù)超出長度限制!"
 }
}

總結(jié)下來一般有下面三種方法:

1、使用約定的 key 作為注釋字段:
如以 //, _comment,#####,—--— (# 或 - 的個數(shù)自定) 作為注釋的 key 等。

2、使用重名 key 作為注釋:
即每個 key,使用兩次,第1次做注釋,第2次做實際屬性。

3、使用字段 key 加前綴做注釋 key:
常用的前綴有 #, _ 等。

能否去掉 key 中的雙引號

序列化之后的 key 被加上了雙引號,例如:

const obj = { name: 'keliq', age: 12 }
console.log(JSON.stringify(obj))
// {"name":"keliq","age":12}

仔細(xì)觀察可以發(fā)現(xiàn),對象的 key 是沒有雙引號的,但是序列化之后,兩邊都被加上了引號,導(dǎo)致字符數(shù)量變多了,那問題就來了:

  • 為什么要給 key 加雙引號?
  • 能不能去掉 key 里面的雙引號?

這里先說一個歷史背景:

在 ECMAScript 3 中,保留字是不能作為對象的 key 的,例如:
{function: 0} // 語法錯誤
{if: 0} // 語法錯誤
{true: 0} // 語法錯誤

只能給 key 添加雙引號或單引號:
{"function": 0} // Ok
{"if": 0} // Ok
{"true": 0} // Ok

但是在 ES5 之后,保留字也是可以作為 key 的了,因此在不考慮向后兼容的情況下,如果能把 JSON 對象表示成跟 JavaScript 對象一模一樣,只是把中間的空格、換行等刪掉該多好呀!

強(qiáng)大的 JSON5

你想要的,它都有!這就是 JSON5 標(biāo)準(zhǔn),它有以下特性:

對象

對象的 key 可以跟 JavaScript 中對象 key 完全一致
末尾可以有一個逗號

數(shù)組

末尾可以有一個逗號

字符串

  • 字符串可以用單引號
  • 字符串可以用反引號
  • 字符串可以用轉(zhuǎn)義字符

數(shù)字

  • 數(shù)字可以是 16 進(jìn)制
  • 數(shù)字可以用點開頭或結(jié)尾
  • 數(shù)字可以表示正無窮、負(fù)無窮和NaN.
  • 數(shù)字可以用加號開頭

評論

支持單行和多行注釋

空格

允許多余的空格

可以看到,JSON5 比 JSON 強(qiáng)大很多,是 JSON 的超集,就好比 TypeScript 相較于 JavaScript。安裝方法為:

npm install json5
# 或者 yarn add json5

序列化示例:

const JSON5 = require('json5')
const obj = {
 name: 'keliq',
 age: 12,
}
const res = JSON5.stringify(obj)
console.log(res) // {name:'keliq',age:12}

反序列化示例:

const JSON5 = require('json5')
const json5str = `// 單行注釋
{
 name:'keliq', // 這是姓名
 age:12, /*這是年齡*/
}`
console.log(JSON5.parse(json5str))

看到這里,不禁感嘆,這才是 JSON 應(yīng)該有的樣子!你說呢?

到此這篇關(guān)于淺談JSON5解決了JSON的兩大痛點的文章就介紹到這了,更多相關(guān)JSON5內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 簡明json介紹

    簡明json介紹

    不要認(rèn)為JSON是種新的應(yīng)用 ,其實JSON就是javascript支持的一種對象直接量。
    2008-09-09
  • IE8 原生JSON支持

    IE8 原生JSON支持

    你可能已經(jīng)從這篇文章的標(biāo)題中猜到了,Internet Explorer 8(目前是Beta2)提供了原生JSON的解析和序列化。
    2009-04-04
  • web頁面數(shù)據(jù)展示新想法(json)

    web頁面數(shù)據(jù)展示新想法(json)

    若使用json作為客戶端和服務(wù)器之間的數(shù)據(jù)交換格式,代替原來的html交換格式。
    2010-06-06
  • jQuery 遍歷json數(shù)組的實現(xiàn)代碼

    jQuery 遍歷json數(shù)組的實現(xiàn)代碼

    看到網(wǎng)上有很多朋友問遍歷json數(shù)組的代碼,腳本之家特為大家整理了一些,需要的朋友可以看下。
    2010-03-03
  • JSON取值前判斷

    JSON取值前判斷

    這篇文章主要介紹了JSON取值前判斷,需要的朋友可以參考下
    2014-12-12
  • JavaScript 解析Json字符串的性能比較分析代碼

    JavaScript 解析Json字符串的性能比較分析代碼

    我們在使用AJAX來做服務(wù)器端和客戶端交互的時候,一般的做法是讓服務(wù)器端返回一段JSON字符串,然后在客戶端把它解析成JavaScript對象。
    2009-12-12
  • js解析與序列化json數(shù)據(jù)(三)json的解析探討

    js解析與序列化json數(shù)據(jù)(三)json的解析探討

    這一節(jié)我們主要討論json的解析,感興趣的朋友可以了解下,JSON.parse()方法也可以接收另一個參數(shù),該參數(shù)是一個函數(shù),將早每個鍵值對上調(diào)用,好了,話不多說,希望本文對你有所幫助
    2013-02-02
  • JSON.stringify 語法實例講解

    JSON.stringify 語法實例講解

    可能有些人對系列化這個詞過敏,我的理解很簡單。就是說把原來是對象的類型轉(zhuǎn)換成字符串類型(或者更確切的說是json類型的)。就這么簡單。打個比方說,你有一個類,那么你可以通過這個方法轉(zhuǎn)換成相應(yīng)的json類型的
    2012-03-03
  • 一文了解什么是JWT

    一文了解什么是JWT

    JSON?WEB?Token是一種基于JSON的、用于在網(wǎng)絡(luò)上聲明某種主張的令牌,由三部分組成:?頭信息,?消息體和簽名,下面就一起來了解一下什么是JWT
    2023-05-05
  • json實現(xiàn)前后臺的相互傳值詳解

    json實現(xiàn)前后臺的相互傳值詳解

    這篇文章主要介紹了json實現(xiàn)前后臺的相互傳值詳解,需要的朋友可以參考下
    2015-01-01

最新評論

科技| 辉南县| 龙州县| 景东| 大埔区| 玉田县| 苍南县| 霍林郭勒市| 舒城县| 伊金霍洛旗| 商河县| 托克逊县| 铜川市| 新丰县| 武山县| 临湘市| 大姚县| 兰考县| 报价| 宜兰县| 开封市| 万盛区| 阜城县| 海宁市| 酉阳| 健康| 建水县| 东山县| 康定县| 乐清市| 葵青区| 茂名市| 闻喜县| 哈密市| 沅陵县| 安庆市| 庆城县| 新邵县| 拉孜县| 临清市| 黔南|