将JSON对象转换回Javascript的字符串

将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

我正在尝试编写一个递归函数,如果它包含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);
    }
    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可以修改传递的参数,以返回与作为字符串的参数不同的结果