将JSON对象转换回Javascript的字符串
我正在尝试编写一个递归函数,如果它包含expr作为键而不是数字,它将把JSON的该部分反馈回函数中。我的代码如下:将JSON对象转换回Javascript的字符串,javascript,json,stringify,Javascript,Json,Stringify,我正在尝试编写一个递归函数,如果它包含expr作为键而不是数字,它将把JSON的该部分反馈回函数中。我的代码如下: var result = 0; function calc(str) { var obj = JSON.parse(str); if(obj.hasOwnProperty("expr")) { var temp = obj.expr; JSON.stringify(temp); calc(temp); } i
var result = 0;
function calc(str) {
var obj = JSON.parse(str);
if(obj.hasOwnProperty("expr")) {
var temp = obj.expr;
JSON.stringify(temp);
calc(temp);
}
if (obj.op == "add") {
var i = parseInt(obj.number);
result += i;
} else if(obj.op == "subtract") {
var i = parseInt(obj.number);
result -= i;
}
return result;
}
我得到一个语法错误,在JSON中的位置1处显示意外的标记o。Stringify没有将其重新格式化为字符串吗?如果是的话,我会怎么做
我的输入如下:
var result = 0;
function calc(str) {
var obj = JSON.parse(str);
if(obj.hasOwnProperty("expr")) {
var temp = obj.expr;
JSON.stringify(temp);
calc(temp);
}
if (obj.op == "add") {
var i = parseInt(obj.number);
result += i;
} else if(obj.op == "subtract") {
var i = parseInt(obj.number);
result -= i;
}
return result;
}
结果=计算“{op:add,编号:5}”;
结果=计算“{op:subtract,数字:2}”;
结果=计算“{op:add,编号:19}”;
结果=计算“{op:subtract,expr:{op:add,number:15}”
应该是这样的:
function calc(str) {
var res = 0;
var obj = (typeof str =="string") ? JSON.parse(str) : str;
if(obj.hasOwnProperty("expr")) obj.number = calc(obj.expr);
switch(obj.op){
case "add":
res += +obj.number;
break;
case "subtract":
res -= +obj.number;
break;
}
return res;
}
输入
我弄明白了
var result = 0;
function calc(str) {
var obj = JSON.parse(str);
var i = parseInt(obj.number);
if(obj.hasOwnProperty("expr")) {
var temp = obj.expr;
temp = JSON.stringify(temp);
var i = calc(temp);
}
if (obj.op == "add") {
result += i;
} else if(obj.op == "subtract") {
result -= i;
}
return result;
}
您可以共享jsonJSON吗?stringify返回一个字符串,它不修改其参数。我的回答中calctemplook上面的一行是错误的:您没有将JSON对象转换为字符串。您正在将JavaScript对象转换为JSON,但它不会修改其参数。注意,JSON.stringify可以修改传递的参数,以返回与作为字符串的参数不同的结果