2013-02-04 29 views
1

我需要將格式爲json的不同字符串傳遞給json解析器。需要較少限制性的json解析器

問題是,jQuery.parseJSON()和JSON.parse()只支持一個非常嚴格的JSON格式:

在格式錯誤的JSON字符串傳遞可能導致拋出異常。例如,下面的都是畸形的JSON字符串:

{測試:1}(測試沒有雙引號括起來)。

{ '測試':1}( '測試' 使用單引號代替雙引號)。

是否有一個限制較少的解析器,允許像那樣傳遞值(不帶引號或單引號)?

順便說一句,我使用的KO 2.2.1所以如果有類似的東西,這將是有益的。

+1

聽起來你不解析JSON的。 – melpomene

+0

我從許多開發人員編寫的html'data- *'attr中獲取值,錯誤肯定會發生,所以我正在尋找一種方法使它更容易。它是一個json結構,唯一的區別是它在關鍵屬性上沒有引號或單引號。 – Tomer

+0

如果結構不太複雜,你可以很容易地編寫自己到自己的規格... – BenM

回答

1

沒有不那麼嚴格的JSON解析器。你要麼處理格式良好的JSON,要麼根本不處理JSON。要解析您的自定義格式,您可能需要查看Crockford's parser源代碼,並對其進行修改以適應您的需求。

或者,對於快速和骯髒的解決方案,您可能只需使用eval(但請注意its use has security implications)。

+0

'不嚴格'我不是說沒有json格式,我只是說這個報價並不重要。就像創建js對象時一樣,您可以選擇省略或在鍵上放置引號。 – Tomer

+3

JS接受,但JSON不。如果你沒有添加引號,你沒有JSON,你有類似的東西。 JSON解析器都是爲解析實際的JSON而構建的。另外,請參閱我的編輯,「eval」可能會起作用,但應謹慎使用。 – bfavaretto

0

有一個稱爲jsonic一個節點模塊,解析非嚴格JSON。

npm install jsonic 


您也可以使用eval:

var parsed = eval(json) 

要小心,因爲eval也可以運行的代碼,所以你必須確保你知道你是什麼樣的解析。