2012-11-13 23 views
0

可能重複:
How to check if a string is a valid JSON string in JavaScript without using Try/CatchisJSON在JavaScript中,沒有的try/catch

的問題已經在這裏問:How to check if a string is a valid JSON string in JavaScript without using Try/Catch。沒有給出有效的答案,即使是經過驗證的答案也沒有回答這個問題。

所以它似乎唯一不使用try/catch的方法是通過regexps;在其中一個答案中給出的正則表達式僅針對eval進行驗證,因此像「2001-05-06」這樣的簡單字符串將傳遞正則表達式,即使它不是JSON。

那麼有沒有人有一個很好的正則表達式來驗證一個格式良好的JSON字符串?

+3

使用正則表達式,而不是一個try/catch正在取代與非工作黑客正確的解決方案。 –

+2

爲什麼你不想使用'try .. catch'?似乎很合理,因爲它在失敗時會引發異常。 –

+1

假設有一些JS庫在不使用'try/catch'的情況下苦心地實現了一個完全正確的JSON解析器 - 我很想知道你會如何證明添加大量代碼和接受性能打擊是正確的,不要寫一個使用'try/catch'的3行解決方案。而這並沒有考慮到更多的代碼==更多的錯誤。 – Jon

回答

2

使用正則表達式而不是try/catch正在用非工作攻擊替換正確的解決方案。

您給出的鏈接建議更改JSON parsing code,您可以修改該鏈接以避免引發異常。我建議替換json_parse.js以下的回調,你會提供的呼叫代碼

error = function (m) { 
    // Call error when something is wrong. 
     throw { 
      name: 'SyntaxError', 
      message: m, 
      at:  at, 
      text: text 
     }; 
    }, 

但坦率地說,我最合理的建議是使用try/catch。這是你在這裏最好的工具。請注意,我的JSON.parse修改「建議」假設管理所有循環/遞歸的中斷,這正是例外情況。

0

link試試這個

var jsonData = '{"1":"test"}'; 

if (/^[\],:{}\s]*$/.test(jsonData.replace(/\\["\\\/bfnrtu]/g, '@'). replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g, ']'). replace(/(?:^|:|,)(?:\s*\[)+/g, ''))) {  
    alert('ok'); 
}else{  
    alert('no'); 
} 
+0

我的第一個測試:''{「1」:「test」:「a」}';'==>顯示爲有效的JSON .... –

+0

由於原始海報和我自己的評論,一個簡單的字符串,如「2012 -12-07「會通過該測試,但它不是有效的json。 – ychaouche