【最簡單的方法】js判斷字符串是否為JSON格式(20180115更新)


前言

 針對 “js判斷字符串是否為JSON格式” 這個問題,在網上查了許多資料,都沒找到自己想要的答案。

 但是看到這個帖子《js判斷字符串是否為JSON格式》后,突然靈光一閃,想到一種很簡單的解決方案。

 如果你對這個方法有異議,歡迎留言探討。

解決方案       

V2.0版 --- 感謝@年少輕狂識 @marihees 的提醒,已經對代碼進行了更新
function isJSON(str) {
if (typeof str == 'string') {
try {
var obj=JSON.parse(str);
if(typeof obj == 'object' && obj ){
return true;
}else{
return false;
}

} catch(e) {
console.log('error:'+str+'!!!'+e);
return false;
}
}
console.log('It is not a string!')
}

v1.0 不嚴謹,已廢棄。
function
isJSON(str) { if (typeof str == 'string') { try { var obj=JSON.parse(str); if(str.indexOf('{')>-1){ return true; }else{ return false; } } catch(e) { console.log(e); return false; } } return false; }

分析

      就像之前的帖子所說,只是單純的用JSON.parse(str)不能完全檢驗一個字符串是JSON格式的字符串,有許多例外:

   JSON.parse('123'); // 123

 JSON.parse('{}'); // {}

 JSON.parse('true'); // true

 JSON.parse('"foo"'); // "foo"

 JSON.parse('[1, 5, "false"]'); // [1, 5, "false"]

 JSON.parse('null'); // null

       

       我們知道,JS中的數據類型分為:字符串、數字、布爾、數組、對象、Null、Undefined。 

       那我們就針對這幾種類型的字符串進行測試。        

function isJSON_test(str) { if (typeof str == 'string') { try { var obj=JSON.parse(str); console.log('轉換成功:'+obj); return true; } catch(e) { console.log('error:'+str+'!!!'+e); return false; } } console.log('It is not a string!') } 
isJSON_test('123'); //number
isJSON_test('aaaa'); //string
isJSON_test('"aaa"');
isJSON_test('true'); //布爾
isJSON_test('["1","2"]'); //數組
isJSON_test('{name:"123"}'); //對象
isJSON_test('{}'); //空對象
isJSON_test('null'); //null
isJSON_test('Undefined'); //Undefined
isJSON_test('{"name":"123"}'); //json
isJSON_test('{"name":"123",}'); //不規范的json
---- v2.0新增測試 -----
isJSON_test('["1{211323}","2"]'); //數組 :含有{字符
isJSON_test('[{},"2"]'); //數組 :子項包含對象
isJSON_test('[[{},{"2":"3"}],"2"]'); //多維數組
 

       

      測試結果如下圖:

  

 

       V1.0

      從以上測試結果,以及JSON的定義 。可以得到一個規律:

如果JSON.parse能夠轉換成功;並且字符串中包含 { 時,那么這個字符串就是JSON格式的字符串。

 

      V2.0

 

  以上測試結果,能夠轉換成功的有:數字、字符串、布爾、數組、空對象、null、json。  

  其中正確的JSON格式有:  數組、空對象、json

  所以得出以下結論:

  如果JSON.parse能夠轉換成功;並且轉換后的類型為object 且不等於 null,那么這個字符串就是JSON格式的字符串。

 

 

 

 

 

      如果大家對這個方法有異議,歡迎在下方留言,感謝。

      

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM