使用eval
與來自您信任的來源的良好控制的數據很好。解析器的啓動成本在最壞的情況下可以忽略不計。當然,使用eval
從源不良控制的數據,你不信任是一個壞主意TM。
如果你不使用eval
,恐怕沒有真正的捷徑,你必須自己解析字符串。如果它真的只是一個簡單的列表如圖所示,那麼使用正則表達式的split
調用可以做到這一點,不需要全開分析器。
快速現成的,袖口的例子(live copy | source):
(function() {
var data = '{required:true, minlength:2, maxlength:100}';
var entries, index, entry, parts;
entries = data.substring(1, data.length - 2).split(/, ?/);
for (index = 0; index < entries.length; ++index) {
entry = entries[index];
parts = entry.split(/: ?/);
display("Key '" + parts[0] + "', value '" + parts[1] + "'");
}
function display(msg) {
var p = document.createElement('p');
p.innerHTML = String(msg);
document.body.appendChild(p);
}
})();
當然這是完全假設的(最明顯的是,價值觀永遠不會包含逗號或冒號字符串),但同樣,如果數據很簡單,你可以避免一個完整的解析器。
「約束是我不能使用JSON」 ......爲什麼?這是JSON的完美用例。改變你的字符串引用鍵,它是有效的JSON。 – 2013-04-23 08:31:00
不管怎樣,它不是JSON,因爲JSON中的鍵必須被雙引號....你從哪裏得到這些字符串? – 2013-04-23 08:31:13
如果它是一個有效的JSON字符串,那麼你可以使用'JSON.parse( '{ 「需要」:真實的, 「使用MINLENGTH」:2, 「最大長度」:100}')'。 – dfsq 2013-04-23 08:31:15