Javascript作為一門非常強(qiáng)大的腳本語言,經(jīng)常在我們的Web開發(fā)中發(fā)揮著重要的作用。在我們的業(yè)務(wù)中,常常需要對(duì)一些返回的數(shù)據(jù)進(jìn)行判斷,其中有一種常見的數(shù)據(jù)格式就是JSON格式,那么如何判斷返回的數(shù)據(jù)是否為JSON格式呢?下面我們將從幾個(gè)方面來介紹該問題。
一、JSON格式是什么
JSON,指的是 JavaScript 對(duì)象標(biāo)記(JavaScript Object Notation),是一種輕量級(jí)的數(shù)據(jù)交換格式。它基于JavaScript語言的一個(gè)子集,通過簡(jiǎn)單的語法為人們提供了一種傳輸數(shù)據(jù)的方法,使得數(shù)據(jù)可以更加方便的進(jìn)行傳輸和解析。
{ "name": "小明", "age": 20, "address": { "city": "北京", "province": "北京市" }, "phone": [ "13712345678", "13012345678" ] }
上述是一個(gè)JSON格式的示例,其中定義了一個(gè)名為小明,年齡20歲,住址為北京市的JSON對(duì)象。
二、判斷JSON格式的方式
1. 利用正則表達(dá)式判斷
通過正則表達(dá)式的方式判斷一個(gè)數(shù)據(jù)是否為JSON格式的方法便捷,具有良好的擴(kuò)展性。我們可以使用如下方法進(jìn)行判斷:
function isJSON(str) { if (typeof str !== 'string') return false; try { JSON.parse(str); return true; } catch (e) { return false; } }
上述代碼中,我們定義了一個(gè)isJSON函數(shù),該函數(shù)接收一個(gè)字符串類型的參數(shù)str,首先通過typeof運(yùn)算符判斷該參數(shù)是否為字符串類型,如果不是則直接返回false;之后使用try-catch語句進(jìn)行JSON.parse(str)的嘗試,如果能成功解析該字符串,則說明該字符串是JSON格式,返回true;否則返回false。
通過這種方法的判斷可以簡(jiǎn)單快捷地判斷一個(gè)字符串是否為JSON格式,如:
console.log(isJSON('{"name":"xiaoming","age":20}')); // true console.log(isJSON('{name:"xiaoming", age:20}')); // false console.log(isJSON(null)); // false
2. 直接判斷變量是否為對(duì)象
由于JSON格式所描述的數(shù)據(jù)都是一種對(duì)象形式,因此我們也可以通過判斷一個(gè)變量是否為對(duì)象的方式來判斷該變量是否為JSON格式的數(shù)據(jù)。
function isJSON(obj) { return typeof obj === 'object' && Object.prototype.toString.call(obj) === '[object Object]' && !Array.isArray(obj); }
上述代碼中,我們定義了一個(gè)isJSON函數(shù),該函數(shù)接收一個(gè)參數(shù)obj。首先通過typeof運(yùn)算符判斷該變量是否為對(duì)象類型,再通過Object.prototype.toString.call(obj)來獲取該變量所屬的對(duì)象類型的字符串描述符,如果其為[object Object],則說明該變量為JavaScript對(duì)象;同時(shí)為了排除數(shù)組類型的數(shù)據(jù),我們還要判斷該變量是否為數(shù)組類型。
通過這種方法的判斷可以對(duì)對(duì)象類型的數(shù)據(jù)進(jìn)行快速判斷,如:
console.log(isJSON({'name': 'xiaoming', 'age': 20, 'basic': {'address': 'beijing'}, 'arr': [1,2,3]})); // true console.log(isJSON({'name': 'xiaoming', 'age': 20, 'basic': {'address': 'beijing'}, 'arr': [1,2,3]})); // false console.log(isJSON(null)); // false
三、總結(jié)
通過以上兩種方式,我們可以判斷一個(gè)數(shù)據(jù)是否為JSON格式,其中正則表達(dá)式的方式可以對(duì)字符串類型的數(shù)據(jù)進(jìn)行判斷,具有簡(jiǎn)單快捷的優(yōu)點(diǎn);而直接判斷變量是否為對(duì)象的方式可以對(duì)任何類型的數(shù)據(jù)進(jìn)行判斷,具有很好的擴(kuò)展性。在業(yè)務(wù)開發(fā)中,視具體情況選擇合適的方法進(jìn)行數(shù)據(jù)格式的判斷,可以提高代碼的效率和代碼的可讀性。