[英]JS : how to convert a string to JS Object (**NOT** to JSON)?
我知道如何解析有效的JSON字符串: JSON.parse('{"key" : "value"}')
。
但是, 有效的JS對象卻無效的JSON (如: JSON.parse("{ key : 'value'}")
呢? 上面的例子拋出:
未捕獲的SyntaxError:JSON中位置2處的意外令牌k
我的實際目標更加棘手。 我想將包含RegEx (不受JSON支持,但受JS支持)的JS對象的字符串解析為JS對象:
'{ key1 : /val1/g , key2 : /val2/i }'
我最終想將這個對象與Mongoose一起使用,並找到它的文檔:
Model.find({
key1 : /val1/g ,
key2 : /val2/i
})
我嘗試將相當復雜的RegEx應用於我的String,用new RegEx("val1","i")
替換/val1/g
:
str = str.replace( /\/(.+?)\/(g?i?).+?(?=,|})/g , "new RegExp(`$1`,`$2`)" )
.replace()
操作工作並按照我想要的方式修改字符串。 它產生:
{ key1 : new RegExp("val1","g") , key2 : new RegExp("val2","i") }
但是當我嘗試對其應用JSON.parse
時,它仍然失敗,因為new RegEx("val1","i")
不是有效值。
如果您控制並信任要轉換的文本,則可以使用eval
:
var str = '{ key1 : /val1/g , key2 : /val2/i }'; var obj = eval("(" + str + ")"); console.log(obj.key1);
請注意,在執行eval
,由於表達式以{
開頭,因此必須將其包裝在()
以便解析器知道這是在啟動對象初始化程序,而不是塊。
關於eval
注意事項:
它允許任意代碼執行。 因此,您確實必須信任要eval
的文本。 不要eval
用戶輸入。
直接包含對eval
調用的執行上下文中的代碼基本上無法優化,因為JavaScript引擎在解析代碼時不知道字符串將包含什么。 因此,盡管從技術上講我認為這是過早的優化,但我還是將上述內容包含在您從主邏輯調用的函數中,而不是直接將其嵌入主邏輯中。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.