如何转换包含JS函数定义的JSON
{
"a1": "5",
"b1": "10",
"c1": "function(param1,param2) { return param1 +param2}"
}
到包含这些函数的JavaScript对象(而不是带有定义的字符串):
{
a1: 5,
b1: 10,
c1: function(param1,param2) { return param1 + param2}
}
答案 0 :(得分:2)
您可以将 reviver功能传递给JSON.parse
。这允许您将自定义逻辑应用于已分析的值。
在此功能中,您可以测试值是否以模式function(...) {
开始:
var obj = JSON.parse(str, function(k, v) {
if (/^\s*function\s*\([^)]*\)\s*{/.test(v)) {
try {
// using the Function constructor to evaluate the function
// definition in global scope
return Function('return ' + v)();
}
catch() {
return v; // maybe not a JS function definition after all
}
}
return v;
});
当然,您也可以迭代生成的对象并在解析后应用相同的逻辑,但如果您有嵌套的对象/数组,则使用reviver函数会更容易。
请注意,这是一个非常简单的测试,仅适用于匿名函数。如果已命名函数,则必须相应地调整表达式。但这是基本的想法。
答案 1 :(得分:0)
使用JS函数JSON.parse
var myobj = JSON.parse("{\"a1\": \"5\", \"b1\": \"10\", \"c1\": \"function(param1,param2) { return param1 +param2}\" }");
答案 2 :(得分:0)
两步:解析json,并将函数源代码提升为函数:
var jsonObj = JSON.parse(jsonFromAjax);
jsonObj.c1 = eval(jsonObj.c1);
答案 3 :(得分:-1)
这是一个将包含函数的json字符串转换回具有有效函数声明的json对象的示例。
var jsonstring =" {\" schema \":{\" title \":\" User Feedback \",\ "说明\":\"所以\",\"输入\":\"对象\",\&# 34;特性\":{\"名称\":{\"类型\":\"串\"}}}, " + " \"选项\":{\"表格\":{\"属性\":{},\"按钮\":{\"提交\":{\"标题\":\"它\",\"单击\":\"()的函数{警报('你好&#39);} \" }}}}}&#34 ;;
var jsonData = JSON.parse(jsonstring);
function Iterate(data)
{
jQuery.each(data, function (index, value) {
if (typeof value == 'object') {
Iterate(value);
}
else {
if (value.indexOf("function()") > -1)
data[index] = eval("(" + value + ")");
}
});
};
Iterate(jsonData);
在这种情况下 jsonData.options.form.buttons.submit.click();