簡體   English   中英

元素列表后缺少](使用reviver的JSON.parse)

[英]missing ] after element list (JSON.parse using reviver )

執行該命令:

function myFunction() {
  var hash = JSON.parse('{"a":"return num"}', function(k, v){ new Function('num', v)(123) });
}

我想獲取哈希圖:{a = 123}

但是,Google Apps腳本說:

語法錯誤:元素列表后缺少]

我知道以下代碼可以很好地工作,但是我希望JSON的值包含“ return”。

function myFunction() {
  var num = 123;
  var hash = JSON.parse('{"a": "num"}', function(k, v){return eval(v)});
}

齊磊功能針對輸入中找到的每個項目運行一次。 對於此JSON字符串:

{"a":"return num"}

它將運行兩次(!)。 首先是內部鍵值對"a":"return num" ,然后是根對象本身(鍵值對"": {"a":"return num"} )。

您只想在鍵為"a"時執行某項操作,在所有其他情況下,您都希望返回不變的值。

 var json = '{"a":"return num"}'; var revived = JSON.parse(json, function (k, v) { if (k === "a") { return (new Function('num', v))(123); } else { return v; } }); console.log(revived); 

小心,這樣做很危險。 new Function實際上與eval()相同,因此我建議您認真考慮做自己想做的更好方法。

如何使用配置對象和特殊的語法約定將數據中的某些值替換為配置中的值:

 var config = { num: 123 }; var json = '{"a":"{{num}}"}'; var revived = JSON.parse(json, function (k, v) { var match = typeof v === "string" && v.match(/^{{(\\w+)}}$/); if (match && config.hasOwnProperty(match[1])) { return config[match[1]]; } else { return v; } }); console.log(revived); 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM